我使用 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个赞
您应该能够通过SetEnvIf
- http://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 地址,但是如果请求经过多个代理,您可能会得到多个地址。
- 3 回答
- 0 关注
- 200 浏览
添加回答
举报
0/150
提交
取消