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

我使用 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 应用程序中获取授权用户名?


繁花如伊
浏览 201回答 3
3回答

米脂

您应该能够通过SetEnvIf-&nbsp;http://httpd.apache.org/docs/2.2/mod/mod_setenvif.html#setenvif&nbsp;-设置标题,如下所示: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 地址,但是如果请求经过多个代理,您可能会得到多个地址。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go