如何通过Keycloak API获取客户端机密?

时间:2018-11-29 11:33:40

标签: python api keycloak

如何通过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错误。

我该怎么办?

4 个答案:

答案 0 :(得分:2)

URL中的

{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)

我认为您的身份验证不起作用。

  1. 您需要令牌。您可以使用OpenID生成(请参见docs)。
  2. 使用令牌(通过标头授权),您可以向API请求。

示例:

获取令牌

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” =“机密”

  1. 进入领域管理面板的CLIENTS部分<protocol>://<host>:<port>/auth/admin/master/console/#/realms/<your realm>/clients/<your clint code>
  2. 将访问类型更改为confidential confidential
  3. 按“保存”
  4. 转到“凭据”标签
  5. 确保“客户端身份验证器” =“客户端ID和机密”
  6. Voila!这是您的客户秘密:

secret

P.S。无法使用API​​检索客户端机密。原因是秘密:)

答案 3 :(得分:0)

除了@ravthiru 的回复,您还可以从管理控制台的“安装”选项卡中检索客户端机密,选择类似 JSON 的格式,客户端机密将在 credentials.secret