Keycloak客户端凭证流程澄清

时间:2017-01-20 05:44:47

标签: openid-connect keycloak

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

但是,我的观察是,客户端内部服务帐户授予了访问令牌。我希望通过向令牌端点提供一些附加参数,为领域中的其他用户获取访问令牌

以下是我使用 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>

如果可能,请告诉我。另外,我想传达的是 Keycloak openid-connect 协议的新内容。

1 个答案:

答案 0 :(得分:6)

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

最终用户 - &gt;文件服务 - &gt; Docs Repo

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

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

但最终用户将使用Authorization code flow执行标准登录,并通过该服务访问doc。该服务将检查另一个角色,让我们说 DOC_USER 并在进入回购之前检查用户是否有权访问此具体资源。

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