Keycloak 客户端凭证流程说明
Keycloak Client Credentials Flow Clarification
我正在使用 Keycloak 服务器来实施 SSO。我可以使用 client_credentials 流程为特定客户端获取 访问令牌 。
但是,我观察到访问令牌是授予 客户端 的 内部服务帐户 。我想通过提供 领域 中存在的 其他用户 获得 访问令牌 令牌端点的附加参数。
下面是当前请求我使用邮递员Chrome扩展[=]令牌端点 33=]:
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 协议是全新的。
我认为您在这里误解了一些 Oauth 概念。 client_credentials 授权只能用于服务本身以授予对特定资源的访问权限。想象一下这个场景:
最终用户 -> 文档服务 -> 文档库
最终用户可以通过文档服务访问存储在存储库中的一些文档。在这种情况下,服务会决定是否授予用户访问特定文档的权限,因为存储库只是一个内容服务器。显然,它们都通过两个不同的 keycloak 客户端进行保护。
但是,文档服务需要对存储库具有完全访问权限。他可以访问他请求的任何文件。解决方案是为文档服务提供服务帐户角色,比方说 DOC_MANAGER 并在请求资源时让 repo 检查此角色。该服务使用 client_credentials 进行身份验证,并作为服务 访问资源 。
但最终用户将执行标准登录,例如使用 Authorization code flow,并通过服务访问文档。该服务将检查另一个角色,比方说 DOC_USER,并在转到存储库之前检查用户是否有权访问该具体资源。
您可以阅读有关 keycloak 服务帐户的更多信息here。
我正在使用 Keycloak 服务器来实施 SSO。我可以使用 client_credentials 流程为特定客户端获取 访问令牌 。
但是,我观察到访问令牌是授予 客户端 的 内部服务帐户 。我想通过提供 领域 中存在的 其他用户 获得 访问令牌 令牌端点的附加参数。
下面是当前请求我使用邮递员Chrome扩展[=]令牌端点 33=]:
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 协议是全新的。
我认为您在这里误解了一些 Oauth 概念。 client_credentials 授权只能用于服务本身以授予对特定资源的访问权限。想象一下这个场景:
最终用户 -> 文档服务 -> 文档库
最终用户可以通过文档服务访问存储在存储库中的一些文档。在这种情况下,服务会决定是否授予用户访问特定文档的权限,因为存储库只是一个内容服务器。显然,它们都通过两个不同的 keycloak 客户端进行保护。
但是,文档服务需要对存储库具有完全访问权限。他可以访问他请求的任何文件。解决方案是为文档服务提供服务帐户角色,比方说 DOC_MANAGER 并在请求资源时让 repo 检查此角色。该服务使用 client_credentials 进行身份验证,并作为服务 访问资源 。
但最终用户将执行标准登录,例如使用 Authorization code flow,并通过服务访问文档。该服务将检查另一个角色,比方说 DOC_USER,并在转到存储库之前检查用户是否有权访问该具体资源。
您可以阅读有关 keycloak 服务帐户的更多信息here。