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 SPI/Provider 中获取当前用户访问令牌(初始登录时)