如果 Keycloak 身份验证是在 Apache 级别而不是 front-end 应用程序上完成的,有没有办法获取用户数据

Is there a way to obtain user data if the Keycloak authentication is done on Apache level, not front-end application

通常,至少有两种使用 Keycloak OpenID Connect 堆栈保护应用程序的选项:

  1. 在使用 Keycloak adapters 的应用程序上使用它(在我的例子中,一个 SPA javascript 前端)
  2. 在 Apache 上使用 mod_auth_openidc

如果我选择使用数字2,如何获取用户数据(例如用户名)?

------------------------根据@Cyril Dangerville 的回答进行编辑---------------- ---

虽然我理解一般的方法,但我的方法似乎很勉强。

  1. 现在我已经通过身份验证,我的请求有 session cookie 和访问令牌 header,但由于初始页面加载

  2. 调用任何受保护的资源以获得访问权限Header值

  3. 使用访问令牌调用 userinfo 端点(但这是在另一个域上,因此不会提交 cookie)

你能帮我解释一下我应该去哪里吗?

使用 mod_auth_openidc,您将用户数据作为 Apache 环境变量 and/or HTTP headers 传递给应用程序。后者在使用 Apache 作为远程应用程序的反向代理时很有用 (mod_proxy)。代理案例在 mod_auth_openidc 项目的 FAQ.

中有简要说明

您可以在配置文件中找到有关如何配置将 OpenID Connect 令牌声明(包括经过身份验证的用户数据)转换为环境 variables/headers 的更多详细信息:auth_openidc.conf;特别是两个属性:

  • 对于 REMOTE_USER 变量:OIDCOAuthRemoteUserClaim <claim-name> [<regular-expression>]
  • 对于其他人:OIDCPassClaimsAs [none|headers|environment|both].