Keycloak 客户凭证流程说明

Posted

技术标签:

【中文标题】Keycloak 客户凭证流程说明【英文标题】:Keycloak Client Credentials Flow Clarification 【发布时间】:2017-06-05 01:01:31 【问题描述】:

我正在使用 Keycloak 服务器来实现 SSO。我可以使用 client_credentials 流程为特定客户端获取 访问令牌

但是,我的观察是访问令牌是为客户端内部服务帐户授予的。我想通过向令牌端点提供一些 附加参数 来获取 realm 中存在的 其他用户访问令牌 .

以下是我使用 Postman Chrome 扩展程序令牌端点发出的当前请求

POST http://localhost:8080/auth/realms/<realm>/protocol/<protocol>/token

x-www-form-urlencoded

grant_type        client_credentials
client_id         <client_id>
client_secret     <client_secret>

如果可能,请告诉我。另外,我想向大家介绍 Keycloakopenid-connect 协议是全新的。

【问题讨论】:

【参考方案1】:

我认为您在这里误解了一些 Oauth 概念。 client_credentials 授权只能用于服务本身以授予对特定资源的访问权限。想象一下这种情况:

最终用户 -> 文档服务 -> 文档存储库

最终用户可以通过 docs 服务访问存储在 repo 中的一些文档。在这种情况下,服务会决定是否授予用户访问特定文档的权限,因为 repo 只是一个内容服务器。显然,它们都通过两个不同的 keycloak 客户端进行保护。

但是,文档服务需要对 repo 具有完全访问权限。他可以访问他要求的任何文件。解决方案是给 docs 服务一个服务帐户角色,比如说 DOC_MANAGER 并在请求资源时让 repo 检查这个角色。该服务使用 client_credentials 进行身份验证并获得对资源的访问权作为服务

但最终用户将执行标准登录,例如使用Authorization code flow,并通过服务访问文档。该服务将检查另一个角色,比如 DOC_USER 并检查用户是否有权访问此具体资源,然后再转到 repo。

您可以阅读有关 keycloak 服务帐户的更多信息here。

【讨论】:

非常感谢您的解释。它非常清晰易懂。我自己也有类似的想法。我问这个是因为这是给我的要求。现在,我确认给我的要求没有任何意义。 :-) 最后一个链接将我带到 404 页面:/ @Sèb 已修复;-)))

以上是关于Keycloak 客户凭证流程说明的主要内容,如果未能解决你的问题,请参考以下文章

Keycloak公共客户端和授权

我应该使用哪个凭证来生成令牌,然后使用 Postman 在 Keycloak DB 中创建用户?

Keycloak 前端和后端客户端

使用 KeyCloak 的 OAuth2 授权接口

没有浏览器的 Keycloak OpenID 客户端

从 Keycloak 中的 REST API 中提取角色