如何通过Keycloak API获取客户端机密?
在文档中,我看到:
GET /admin/realms/{realm}/clients/{id}/client-secret
我的代码如下:
data = {
"grant_type" : 'password',
"client_id" : 'myclientid',
"username" : 'myusername',
"password" : 'mypassword'
}
response = requests.get("https://mylink.com/auth/admin/realms/{myrealm}/clients/{myclientid}/client-secret", data=data, headers= {"Content-Type": "application/json"})
我总是收到401错误。
我该怎么办?
答案 0 :(得分:2)
{id}不是clientId,它不同于clientId。
它是密钥斗篷的唯一ID(即uuid
),类似于628e4b46-3d79-454f-9b1c-e07e86ee7615
获取/ admin / realms / {realm} / clients / {id} / client-secret
您可以使用此api获取ID,该API返回ClientRepresentation的列表,该列表同时具有 Id 和 clientId ,请使用 Id >
GET / {realm} / clients
`
答案 1 :(得分:1)
我认为您的身份验证不起作用。
示例:
获取令牌
data = {"username": "username", "password": "password",
"client_id": "client_id", "client_secret": "client_secret",
"grant_type": "password"}
token = request.post("https://{server-url}/"realms/{realm-name}/protocol/openid-connect/token", data=data)
请求API
response = requests.get("https://mylink.com/auth/admin/realms/{myrealm}/clients/{myclientid}/client-secret", data=data, headers= {"Authorization": "Bearer " + token.get('access_token'), "Content-Type": "application/json"})
答案 2 :(得分:1)
您无法为公共客户获得client_secret
。您的客户应具有“ access_type” =“机密”
CLIENTS
部分(<protocol>://<host>:<port>/auth/admin/master/console/#/realms/<your realm>/clients/<your clint code>
) confidential
答案 3 :(得分:0)
除了@ravthiru 的回复,您还可以从管理控制台的“安装”选项卡中检索客户端机密,选择类似 JSON 的格式,客户端机密将在 credentials.secret
中