通常,使用Keycloak OpenID Connect堆栈保护应用程序至少有2个选项:
- 使用 Keycloak
adapters
在应用程序上使用它(在我的例子中,是 SPA JavaScript 前端( - 使用
mod_auth_openidc
在Apache上使用它
如果我选择使用数字 2,如何获取用户数据(例如用户名(?
------------------------编辑@Cyril由于Dangerville回答-----------------
虽然我理解一般方法,但我的方式似乎非常强迫。
-
现在我已经过身份验证,我的请求具有会话cookie和访问令牌标头,但由于初始页面加载而无法访问任何标头
-
调用任何受保护的资源以获取访问权限标头值
-
使用访问令牌调用用户信息端点(但这在另一个域上,因此不会提交cookie(
你能帮我解释一下我应该去哪里吗?
使用 mod_auth_openidc,您可以将用户数据作为 Apache 环境变量和/或 HTTP 标头传递给应用程序。如果使用 Apache 作为远程应用程序的反向代理,后者很有用 (mod_proxy(。代理案例mod_auth_openidc项目的常见问题解答中简要介绍了。
您可以在配置文件中找到有关如何配置 OpenID Connect 令牌声明(包括经过身份验证的用户数据(到环境变量/标头的转换的更多详细信息:auth_openidc.conf; 特别是两个属性:
- 对于REMOTE_USER变量:
OIDCOAuthRemoteUserClaim <claim-name> [<regular-expression>]
- 对于其他人:
OIDCPassClaimsAs [none|headers|environment|both]
.