使用 mod_auth_openidc 的可选或匿名身份验证
Optional or anonymous authentication with mod_auth_openidc
是否有可能在 mod_auth_openidc 中做相当于
prompt=none 尝试使用已登录用户的凭据访问受保护的网站,但如果没有则回退到允许未经身份验证的访问?
我 运行 一个网站,public 无需任何身份验证即可访问该网站,但也为已登录的用户提供额外的可选功能。我想使用 mod_auth_openidc 来允许用户登录,但如果我使用模块保护我的页面,它会在访问页面之前强制登录(如您所料),如果我不保护我的页面,那么即使我不保护我的页面我也看不到 OIDC 变量已经登录。
因此,您将访问网站并查看主页。该页面上有一个登录按钮。当您登录时,您仍然在主页上,但现在您会看到额外的内容(例如个性化的欢迎消息)。
到目前为止,我唯一的解决方案是让我的整个站点在两个不同的 url 上可用,一个受 openidc 保护,一个不受 openidc 保护。当您登录时,您将被重定向到另一个站点。但这可能会使用户和服务器端软件感到困惑,因为它需要配置 baseURL。
我可以通过其他方式很容易地实现这个,但是我找不到基于 mod_auth_openidc 模块的解决方案。
我试过这个:
<Location /example/public>
AuthType openid-connect
</Location>
<Location /example/protected/>
AuthType openid-connect
Require valid-user
</Location>
我希望发生的事情是前往 /example/protected 需要我登录(确实如此),然后返回 /example/public 仍然会知道我已经登录。但是尽管 /example/protected 工作正常(所以我的基本设置是正确的),/example/public 根本不起作用 - 没有设置变量,所以我仍然没有登录。
是否有一个 Require 选项可以满足我的要求,或者其他一些明确的答案?
您需要使用OIDCUnAuthAction pass
,参见:https://github.com/zmartzone/mod_auth_openidc/commit/6890b13c481f12debbd7c65a79e9dc5197deb794
# Defines the action to be taken when an unauthenticated request is made.
# "auth" means that the user is redirected to the OpenID Connect Provider or Discovery page.
# "401" means that HTTP 401 Unauthorized is returned.
# "410" means that HTTP 410 Gone is returned
# "pass" means that an unauthenticated request will pass but claims will still be passed when a user happens to be authenticated already
# Useful in Location/Directory/Proxy path contexts that serve AJAX/Javascript calls and for "anonymous access"
# When not defined the default "auth" is used.
#OIDCUnAuthAction [auth|pass|401|410]
是否有可能在 mod_auth_openidc 中做相当于 prompt=none 尝试使用已登录用户的凭据访问受保护的网站,但如果没有则回退到允许未经身份验证的访问?
我 运行 一个网站,public 无需任何身份验证即可访问该网站,但也为已登录的用户提供额外的可选功能。我想使用 mod_auth_openidc 来允许用户登录,但如果我使用模块保护我的页面,它会在访问页面之前强制登录(如您所料),如果我不保护我的页面,那么即使我不保护我的页面我也看不到 OIDC 变量已经登录。
因此,您将访问网站并查看主页。该页面上有一个登录按钮。当您登录时,您仍然在主页上,但现在您会看到额外的内容(例如个性化的欢迎消息)。
到目前为止,我唯一的解决方案是让我的整个站点在两个不同的 url 上可用,一个受 openidc 保护,一个不受 openidc 保护。当您登录时,您将被重定向到另一个站点。但这可能会使用户和服务器端软件感到困惑,因为它需要配置 baseURL。
我可以通过其他方式很容易地实现这个,但是我找不到基于 mod_auth_openidc 模块的解决方案。
我试过这个:
<Location /example/public>
AuthType openid-connect
</Location>
<Location /example/protected/>
AuthType openid-connect
Require valid-user
</Location>
我希望发生的事情是前往 /example/protected 需要我登录(确实如此),然后返回 /example/public 仍然会知道我已经登录。但是尽管 /example/protected 工作正常(所以我的基本设置是正确的),/example/public 根本不起作用 - 没有设置变量,所以我仍然没有登录。
是否有一个 Require 选项可以满足我的要求,或者其他一些明确的答案?
您需要使用OIDCUnAuthAction pass
,参见:https://github.com/zmartzone/mod_auth_openidc/commit/6890b13c481f12debbd7c65a79e9dc5197deb794
# Defines the action to be taken when an unauthenticated request is made.
# "auth" means that the user is redirected to the OpenID Connect Provider or Discovery page.
# "401" means that HTTP 401 Unauthorized is returned.
# "410" means that HTTP 410 Gone is returned
# "pass" means that an unauthenticated request will pass but claims will still be passed when a user happens to be authenticated already
# Useful in Location/Directory/Proxy path contexts that serve AJAX/Javascript calls and for "anonymous access"
# When not defined the default "auth" is used.
#OIDCUnAuthAction [auth|pass|401|410]