在 Keycloak SPI/Provider 中获取当前用户访问令牌(初始登录时)

Posted

技术标签:

【中文标题】在 Keycloak SPI/Provider 中获取当前用户访问令牌(初始登录时)【英文标题】:Getting the current users access token in a Keycloak SPI/Provider (at initial login) 【发布时间】:2019-02-19 17:57:10 【问题描述】:

当用户刚刚登录时,我如何在 Keycloak 服务提供者界面中访问当前经过身份验证的用户访问令牌?

目前情况: 当用户使用用户名和密码执行登录时,我正在自定义用户联合/存储提供程序中使用 Apache HttpClient 进行手动密码授予。

然后使用用户访问令牌调用具有其身份验证上下文的内部 API。由于用户在登录时给予了多次同意,因此出于审计/GDPR 目的,需要使用用户持有者令牌进行此 API 调用。

我假设没有办法在用户存储提供程序中获取当前用户身份验证上下文,因为此时用户尚未经过身份验证,对吧? 密码授予当时获取用户身份验证上下文/令牌的正确方法吗?另一种选择可能是链接 SPI,例如使用身份验证 SPI 并在那里拦截令牌。但您似乎无法覆盖现有的身份验证流程。 最后也是最好的选择是创建一个事件侦听器提供程序。但是我可以访问那里的访问令牌吗?

我非常感谢您的意见,因为整个努力感觉有点不对劲。

【问题讨论】:

【参考方案1】:

另一个选项(对我来说更有意义)是使用客户端 ID 作为服务进行身份验证(客户端身份验证),以执行审核。这样,您甚至不需要在那时对用户进行身份验证。我认为这是一个更好的解决方案,因为除了我所说的之外,审计实际上是一项与系统相关的工作。如果您让任何用户进行审计,他们可以使用有效令牌编写一些代码,以自行执行大规模/虚假审计。

将其留给具有具体角色的具体客户并为审计过程请求该角色更有意义。

【讨论】:

以上是关于在 Keycloak SPI/Provider 中获取当前用户访问令牌(初始登录时)的主要内容,如果未能解决你的问题,请参考以下文章

何时在 Keycloak 中使用领域角色?

如何在 nextjs 中使用 keycloak?

在 Spring Boot 中扩展 Keycloak 令牌

在 Keycloak 登录主题中获取 root url

如何在 keycloak 中调用 create user api 后获取 userId?

@RolesAllowed() 在 keycloak 中检查啥角色