无法根据 Apache 虚拟主机中的路径位置编辑身份验证标头?

无法根据 Apache 虚拟主机中的路径位置编辑身份验证标头?

Apache 作为反向代理的应用程序行为如下:

  1. 它需要基本身份验证标头才能登录。
  2. 对于从 开始的路径,/api/*只需要 Bearer 令牌。
  3. 如果标头中有基本令牌,应用程序将返回 401,即未授权的 http 响应 - 它只需要 Bearer 令牌。

除路径之外的所有 URL 都配置了 CAS 身份验证/api/*,并且我在 vhost 配置文件中设置了基本身份验证令牌 - 让用户在通过 CAS 进行身份验证后无需再次显示登录表单即可登录。

Apache 配置文件enterprise-search.conf

<VirtualHost *:80>
        ServerName https://search.test.xyz
        ServerAdmin john@xyz

    RemoteIPHeader X-Client-IP
    RemoteIPInternalProxy 10.10.10.2
    LogFormat "%a %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-agent}i\"" combined-forwarded

    CustomLog ${APACHE_LOG_DIR}/enterprise-search-access.log combined-forwarded
    ErrorLog ${APACHE_LOG_DIR}/enterprise-search-error.log

    LogLevel debug
    
        CASRootProxiedAs https://search.xyz
    
    <Location />
        # authn type
        AuthType CAS
        CASScope /
        AuthName "KFUPM"
        # authz
        # Grant all groups access to the root
        AuthGroupFile "/etc/apache2/http-authz/enterprise-search"
        Require group all-enterpirse-search
        # Pass REMOTE_USER header to application
        RewriteEngine On
        RewriteCond %{LA-U:REMOTE_USER} (.+)$
        RewriteRule . - [E=RU:%1,NS]
        RequestHeader set REMOTE_USER %{RU}e
        RequestHeader set Authorization "Basic xxxxxxxxxx"
    </Location>

    # authz: local_groups
        <Location /all-enterpirse-search>
        AuthGroupFile "/etc/apache2/http-authz/enterprise-search"
        Require group all-enterprise-search all-enterpirse-search
    </Location>
        
    <Location /api/>
        # authn type
        AuthType none
        Allow from all
        Satisfy any
        
        # authz
        Require valid-user
        # Pass REMOTE_USER header to application
        RewriteEngine On
        RewriteCond %{LA-U:REMOTE_USER} (.+)$
        RewriteRule . - [E=RU:%1,NS]
        RequestHeader set REMOTE_USER %{RU}e
        RequestHeader edit Authorization "Basic[^,]+, " ""

        ProxyPass / http://localhost:3002/
    ProxyPassReverse / http://localhost:3002/
    
    
</VirtualHost>

的行为RequestHeader edit Authorization "Basic[^,]+, " ""是替换客户端传递的基本令牌头,并且它工作正常。

但我实际上想要的是 在 中设置基本令牌<Location />并在 中将其删除<Location /api/>。使用RequestHeader edit Authorization "Basic[^,]+, " ""inside<Location /api/>不会删除基本令牌,应用程序将返回带有 401 响应的 API 调用。

我对 Apache 配置还不熟悉,可能我实现目标的方法不正确。请提出更好的方法。

谢谢。

相关内容