Apache,mod_auth_kerb,mod_proxy:在Go Web应用程序中获取经过身份验证的用户

Ulr*_*alt 1 apache mod-proxy go mod-auth-kerb

我将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>
Run Code Online (Sandbox Code Playgroud)

 AuthType                    basic
Run Code Online (Sandbox Code Playgroud)

我使用go函数从请求的Authorization标头中获取用户名

func (*Request) BasicAuth
Run Code Online (Sandbox Code Playgroud)

但是与Authorization标头协商不可能。此外,由于没有cgi环境,因此我无法使用REMOTE_USER环境变量。我也尝试设置RequestHeader,但是没有成功。

是否有可能从go应用程序中获取授权的用户名?

Ulr*_*alt 5

抱歉耽搁了-我参与了其他项目。非常感谢您的建议。在切换到CentOS 7 / httpd 2.4环境后,以下解决方案现在对我有用:

<VirtualHost host.domain.com:80>

  <Location />
    ## gzip                                                                                          
    ##                                                                                               
    AddOutputFilterByType DEFLATE text/html

    AuthType                   Kerberos
    AuthName                   "Web Application"
    KrbAuthRealms              DOMAIN.COM
    Krb5Keytab                 /etc/host.krb5keytab
    KrbMethodNegotiate         on
    KrbAuthoritative           on
    KrbMethodK5Passwd          off
    KrbLocalUserMapping        on
    KrbSaveCredentials         on
    require valid-user

    RequestHeader unset X-Forwarded-User
    RewriteEngine On
    RewriteCond %{LA-U:REMOTE_USER} (.+)
    RewriteRule .* - [E=RU:%1]
    RequestHeader add X-Forwarded-User %{RU}e
  </Location>

  ProxyPreserveHost On
  ProxyPass / http://127.0.0.1:8000/
  ProxyPassReverse / http://127.0.0.1:8000/

  ServerName host.domain.com
 </VirtualHost>
Run Code Online (Sandbox Code Playgroud)

可通过以下方式在Go中访问用户:

user := req.Header.Get("X-Forwarded-User")
Run Code Online (Sandbox Code Playgroud)