KEYCLOAK:仅通过“用户名”获取访问令牌(无密码)

Posted

技术标签:

【中文标题】KEYCLOAK:仅通过“用户名”获取访问令牌(无密码)【英文标题】:KEYCLOAK: Obtaining Access token by 'user name' only (without password) 【发布时间】:2018-07-09 02:12:53 【问题描述】:

我有一个关于 Keycloak 和获取访问令牌的问题。

我们的设置如下: · 用户在 Keycloak 中创建和维护 · 资源、策略和权限也在 Keycloak 中维护

我们的用例是

作为第三方应用程序,我想通过仅向 Keycloak 提供用户名来获取特定用户的授权信息(例如基于资源和范围的权限),因此我可以允许或禁止进一步的操作。

更具体: 在我们的应用程序中,需要根据访问令牌验证对其他服务的每个请求。但我们只有用户名。

现在的问题是:

> 只知道用户名,如何获取用户的访问令牌?

> 有没有办法为这样的用户获取访问令牌?

【问题讨论】:

【参考方案1】:

对于那些真正需要从客户端模拟用户的人,有一个新的 RFC:token-echange。

Keycloak loosely implement it 在回答此问题时

具体见https://www.keycloak.org/docs/latest/securing_apps/#direct-naked-impersonation

【讨论】:

【参考方案2】:

您没有在问题中指定当前用户是否已登录。您是在验证用户特定的操作,还是想要检索应用程序的用户角色?

用户已登录并正在执行一些操作

我想你正在使用一些 keycloak 适配器。然后只需检索会话对象,您应该在其中的某处获得额外的信息。

如果没有,您可以自己解析请求。使用 OpenId Connect 时,始终在 Authorization 标头中为每个请求发送访问令牌。令牌是base64编码的,你可以自己解码令牌。

应用程序正在为某个注册用户执行一些操作,而他没有登录

用户访问令牌旨在为用户提供权限。正如您在问题中所说:As a third party application, I want... 所以在这里您不是作为登录用户,而是作为应用程序,所以您需要使用客户端凭据。只需授予客户端权限以列出所有用户及其角色(view-users 角色可能就足够了,请参见下面的链接)并使用客户端凭据授予登录。然后,您可以在应用程序业务逻辑中处理细粒度的权限。

另请参阅:

Keycloak Client Credentials Flow Clarification Keycloak spring security client credential grant How to get Keycloak users via REST without admin account

【讨论】:

以上是关于KEYCLOAK:仅通过“用户名”获取访问令牌(无密码)的主要内容,如果未能解决你的问题,请参考以下文章

如何获取访问令牌中的角色:keycloak

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

如何更改通过 Keycloak 令牌交换创建的访问令牌的内容

从 Keycloak 访问令牌中获取客户端会话 ID

Keycloak 访问令牌与 UserInfo 令牌?

Keycloak 客户凭证流程说明