2

我只想使用 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......

我无计可施。这应该如何工作?它可以工作吗?

4

0 回答 0