为了账号安全,请及时绑定邮箱和手机立即绑定

Apache、mod_auth_kerb、mod_proxy:在 Go Web 应用程序中获取经过

Apache、mod_auth_kerb、mod_proxy:在 Go Web 应用程序中获取经过

Go
繁花如伊 2021-10-04 16:57:04
我使用 Apache 作为反向代理,用于在 go http 服务器前面进行身份验证。以下 apache kerberos 设置可以解决一个问题。我不知道如何在我的 go 应用程序中获取经过身份验证的用户名。httpd.conf:<VirtualHost host.domain.com:80>  ProxyPreserveHost On  ProxyPass / http://127.0.0.1:9000/  ProxyPassReverse / http://127.0.0.1:9000/  <Location />    ## gzip    ##    AddOutputFilterByType DEFLATE text/html    Order                      deny,allow    Allow                      from all    AuthType                   Kerberos    AuthName                   "User Admin"    KrbAuthRealms              DOMAIN.COM    Krb5Keytab                 /etc/host.krb5keytab    KrbMethodNegotiate         on    KrbAuthoritative           on    KrbMethodK5Passwd          off    KrbLocalUserMapping on    KrbSaveCredentials         on    require valid-user  </Location></VirtualHost>和 AuthType                    basic我使用 go 函数从请求的 Authorization 标头中获取用户名func (*Request) BasicAuth但是使用 Authorization 标头协商这是不可能的。此外,我无法使用 REMOTE_USER 环境变量,因为没有 cgi 环境。我也尝试设置 RequestHeader 但没有任何成功。是否有可能从 go 应用程序中获取授权用户名?
查看完整描述

3 回答

?
米脂

TA贡献1836条经验 获得超3个赞

您应该能够通过SetEnvIfhttp://httpd.apache.org/docs/2.2/mod/mod_setenvif.html#setenvif -设置标题,如下所示:

SetEnvIf Authorization "(.*)" HTTP_APP_USER=$1

然后,您可以通过 Go 在 Go 中访问它r.Header.Get("HTTP_APP_USER")

要注意的是有没有保证客户没有设置具有相同的标题:http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#x-headers

在源服务器上使用这些标头时要小心,因为如果原始请求已经包含这些标头之一,它们将包含多个(逗号分隔)值。例如,您可以在源服务器的日志格式字符串中使用 %{X-Forwarded-For}i 来记录原始客户端的 IP 地址,但是如果请求经过多个代理,您可能会得到多个地址。


查看完整回答
反对 回复 2021-10-04
  • 3 回答
  • 0 关注
  • 200 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信