我正在使用Keycloak服务器来实现SSO.我能够使用client_credentials流获取特定客户端的访问令牌.
然而,我的观察是,访问令牌被授予内部服务帐户的的客户端.我想获得访问令牌的其他用户存在的领域通过提供一些额外的参数令牌端点.
以下是我使用Postman Chrome扩展程序对令牌端点发出的当前请求:
POST http://localhost:8080/auth/realms//protocol/ /token x-www-form-urlencoded grant_type client_credentials client_id client_secret
如果可能,请告诉我.此外,我想传达一下,这对Keycloak和openid-connect协议来说是全新的.
我认为你在这里误解了一些Oauth概念.该client_credentials补助只能用于服务本身授予访问的特定资源.想象一下这种情况:
最终用户 - >文档服务 - >文档回购
最终用户可以通过docs服务访问存储在repo中的一些文档.在这种情况下,服务决定授予用户对特定文档的访问权,因为repo仅仅是内容服务器.显然,它们都是通过两个不同的keycloak客户端来保护的.
但是,docs服务需要具有对repo的完全访问权限.他可以访问他要求的任何文件.解决方案是为docs服务提供服务帐户角色,假设DOC_MANAGER并在请求资源时对此角色进行repo检查.该服务使用client_credentials进行身份验证,并作为服务访问该资源.
但最终用户将使用授权代码流执行标准登录,例如,通过该服务访问doc.该服务将检查另一个角色,假设DOC_USER并在进入回购之前检查用户是否可以访问此具体资源.
您可以在此处阅读有关keycloak服务帐户的更多信息.