首页 > 解决方案 > mod_auth_openidc 将声明作为公共位置的 http 标头(全部授予)

问题描述

我在 apache 2.4 服务器上配置了 mod_auth_openidc。对于受保护的位置,一切正常。对于这些资源,后端应用程序(PHP 脚本或反向代理应用程序)将声明作为 HTTP 标头 OIDC_xxx 接收。

在这个网络服务器上,我也有公共位置。不过,如果经过身份验证的用户点击了这些资源中的一个,我也希望收到 OIDC 标头。

我的 httpd 配置看起来像

<Location /private>
   AuthType openid-connect
   <RequireAll>
      Require valid-user
      Require claim groups:B2C
   </RequireAll>
</Location>
<Location /public>
   AuthType openid-connect
   <RequireAny>
      Require valid-user
      Require all granted
   </RequireAny>
</Location>

私有位置受到 oidc 提供程序的良好保护,并且填充了 HTTP 标头。未经身份验证的用户可以访问公共位置(需要全部授权);但是有一种方法可以配置 httpd 和 mod_auth_openidc 来填充经过身份验证的用户访问公共位置的标头。上面的配置在任何情况下都不会这样做(没有 OIDC_ 标头)。

谢谢。

标签: mod-auth-openidc

解决方案


有一种方法可以通过以下方式配置这种所谓的“惰性会话”:

OIDCUnAuthAction pass

在该特定位置,请参阅OIDCUnAuthAction原语的文档:

定义在发出未经身份验证的请求时要采取的操作。

“auth”表示用户被重定向到 OpenID Connect Provider 或 Discovery 页面。
“401”表示返回 HTTP 401 Unauthorized。
“410”表示返回 HTTP 410 Gone。
“通过”意味着未经身份验证的请求将通过,但当用户碰巧已经通过身份验证时,声明仍将通过。

在服务 AJAX/Javascript 调用和“匿名访问”的位置/目录/代理路径上下文中很有用。
如果未定义,则使用默认的“auth”。

OIDCUnAuthAction [auth|pass|401|410]


推荐阅读