mod_auth_openidc错误400错误的请求-Cookie过多(?)

时间:2019-04-02 08:11:35

标签: apache2 virtualhost mod-auth-openidc

我有Nginx在 example.org/portia/test 上映射的容器,其结构如下:

  • 容器仅公开端口9001,作为代理的Apache实例正在监听。
  • 一个Django服务器正在8000上运行,/ api和/ server_capabilities的所有流量都发送给他。
  • 另一台Django服务器正在9002上运行,它可以处理/ ws路径上的websocket。

a scheme of my network

我正在尝试使用适用于Apache的mod_auth_openidc插件添加OpenIdConnect身份验证,我想保护整个虚拟主机。

到目前为止,我到达auth-example.org上正确的登录页面,我使用自己的凭据登录,并且auth服务器使用正确的URI重定向我。 Ngnix回答我400错误。

request sent with a lot of cookies

mydomain.org内的多个应用程序都使用了auth服务器,所以我想我的Apache配置文件出了点​​问题。

为清楚起见,我无法触摸Nginx或auth服务器的confs。

apache_site.conf

<VirtualHost *:9001>
        ServerAdmin webmaster@localhost
        DocumentRoot /app/portiaui/dist

        ServerName www.example.org
        ServerAlias example.org

        #ProxyRequests On
        Alias /static /app/portiaui/dist

        OIDCProviderMetadataURL https://www.auth-example.org/auth/realms/master/.wel$
        OIDCRedirectURI https://example.org/portia/test/callback
        OIDCCryptoPassphrase <much secret>
        OIDCClientID portia
        OIDCClientSecret <much private>
        OIDCCookiePath example.org/portia/test/
        OIDCCookieDomain example.org


        <Location /static>
                Require all granted
        </Location>

        <Location /api> 
                Require all granted
                ProxyPass http://127.0.0.1:8000/api
                ProxyPassReverse http://127.0.0.1:8000/api
                ProxyPreserveHost On
       </Location>

       <Location /server_capabilities> 
                Require all granted
                ProxyPass http://127.0.0.1:8000/server_capabilities
                ProxyPassReverse http://127.0.0.1:8000/server_capabilities
                ProxyPreserveHost On
        </Location>

        <Location /ws> # mod_proxy_wstunnel is enabled 
               RequestHeader set Host "127.0.0.1:9002"
               ProxyPreserveHost On
               ProxyPass http://127.0.0.1:9002/ws
               ProxyPassReverse http://127.0.0.1:9002/ws
        </Location>

        <Location />
                AuthType openid-connect
                Require valid-user
        </Location>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

2 个答案:

答案 0 :(得分:0)

OIDCCookiePath中的cookie路径设置仅需要包含实际路径,而无需包含主机。实际上,我将开始不使用OIDCCookiePathOIDCCookieDomain中的任何一个。

答案 1 :(得分:0)

汉斯·Z(Hans Z.)的答案建议我也改变相对路径中的OIDCRedirectURI

设置OIDCRedirectURI /callback解决了该问题:我的Apache实例不接收整个URL www.example.org/portia/test/callback,而仅接收路径的最后一部分。这是由于前端Nginx实例。