Keycloak 调用keydove';s使用客户端机密的管理RESTAPI
从Docker映像运行KeyClope时,使用CURL at的示例适用于我 为了实现应用程序的最终目标形状,我希望使用客户机ID和密码而不是用户名+密码进行身份验证 但是,当我将admin cli客户端切换到“已启用服务帐户”时,访问类型为机密,并通过以下调用获取令牌:Keycloak 调用keydove';s使用客户端机密的管理RESTAPI,keycloak,Keycloak,从Docker映像运行KeyClope时,使用CURL at的示例适用于我 为了实现应用程序的最终目标形状,我希望使用客户机ID和密码而不是用户名+密码进行身份验证 但是,当我将admin cli客户端切换到“已启用服务帐户”时,访问类型为机密,并通过以下调用获取令牌: curl -d "client_id=admin-cli" -d "client_id=admin-cli" -d "client_secret=xxxx" -d "grant_type=client_credentials"
curl -d "client_id=admin-cli" -d "client_id=admin-cli" -d "client_secret=xxxx" -d "grant_type=client_credentials" "http://localhost:8080/auth/realms/master/protocol/openid-connect/token"
该令牌导致对AdminRESTAPI的调用出现403错误。我做错了什么吗?当作为这样的客户进行身份验证时,需要向客户的服务帐户授予适当的角色(例如“管理员”)。这可以在客户端的keydove admin中的“服务帐户角色”选项卡上完成。以下是我如何在admin cli上实现客户端凭据:
当文档涉及到要调用的实际URL时,它不一定特别清楚:例如,我最初认为这些操作总是在主域上进行的,但事实并非如此。我也遇到了同样的问题,经过一段时间后,我发现了这个问题(顺便说一句,我使用的是KeyClope v7.0.0) 这是您需要做的:
- 将新的机密客户端添加到域主机
- 对于该客户端,启用选项
服务帐户已启用
- 在“映射器”选项卡上,创建新的自定义“受众”映射器:
- 名称:
aud映射器
- 映射器类型:
受众
- 包括客户端观众:
安全管理控制台
- 名称:
#!/usr/bin/env python
import requests
import json
headers = {"Content-Type": "application/x-www-form-urlencoded"}
url = "https://localhost:8080/auth/realms/master/protocol/openid-connect/token"
session = requests.Session()
grant_type='client_credentials'
client_id = "super-client" # change this one
client_secret = "super-client-secret" # change this one
payload = "scope=openid&client_id={0}&grant_type={1}&client_secret={2}".format(
client_id, grant_type, client_secret)
ret = session.post(url=url, headers=headers, data=payload)
token_object = json.loads(ret.text)
print (token_object['access_token'])
此外,在“客户机范围”选项卡中,“角色”范围应添加到默认范围,或添加到可选范围,并在请求访问令牌时设置为范围的“角色”。