我只想使用 mod_auth_openidc 进行身份验证,方法是使用 REMOTE_USER 中设置的内容。
目前,我有这个:
<Location />
# reverse proxy to app
# authorization not controlled by web server, but by app
Require all granted
</Location>
用户访问由登录他们的应用程序托管的 url。登录后,每个页面上都有附加信息,并且允许访问一些返回 401 的 url。
现在我想在其中添加 OIDC,所以我尝试添加以下内容:
OIDCRedirectURI https://<hostname>/oidc/redirect_uri
<Location /oidc>
ProxyPass "!"
AuthType openid-connect
Require valid-user
</Location>
访问“/oidc”成功重定向到提供者,然后重定向回应用程序中不存在的/oidc,因此apache进入404。
如果我去其他任何地方,则没有设置 REMOTE_USER,因此用户未通过身份验证。(我有一个调试页面,为此转储标题和环境变量以及其他杂项。)
我发现了这个问题:Optional or anonymous authentication with mod_auth_openidc,其中提到了 OIDCUnAuthAction,但不清楚如何使用它。
如果我将第一个位置块更改为:
<Location />
# reverse proxy to app
# authorization not controlled by web server, but by app
Require all granted
OIDCUnAuthAction pass
</Location>
..然后用户不再被重定向。
如果我另外添加OIDCUnAuthAction auth
到第二个位置块,则重定向将返回,并且用户将返回到被重定向到 /oidc 并且不会在其他任何地方进行身份验证。
<Location /oidc>
ProxyPass "!"
AuthType openid-connect
Require valid-user
OIDCUnAuthAction auth
</Location>
如果我保留 /oidc-block 的最新版本并将第一个块更改为
<Location />
# reverse proxy to app
# authorization not controlled by web server, but by app
AuthType openid-connect
Require valid-user
OIDCUnAuthAction pass
</Location>
..这不会改变任何事情。
如果我确实在任何地方强制登录,使用
<Location />
# reverse proxy to app
# authorization not controlled by web server, but by app
AuthType openid-connect
Require valid-user
</Location>
然后访问任何页面将我重定向到提供者,该提供者将我重定向到我来自的地方。在调试页面上,我看到有很多声明标头,但 REMOTE_USER 要么未设置,要么设置为无法转储(应用程序不可见),因此用户未通过身份验证。
如果我使用OIDCAuthNHeader Foo
它与其他 http 标头一起使用,前缀为HTTP_
,但是应用程序找不到它,因为它没有命名REMOTE_USER
......
我无计可施。这应该如何工作?它可以工作吗?