web-dev-qa-db-ja.com

Keycloak APIを介してクライアントシークレットを取得する方法

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エラーが発生します。

何が悪いのでしょうか?

8
president

認証が機能していないと思います。

  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"})

URLの{id}はclientIdではなく、clientIdとは異なります。キークロークの一意のID(uuid)です。628e4b46-3d79-454f-9b1c-e07e86ee7615のようなもの

GET/admin/realms/{realm}/clients/{id}/client-secret

IdclientIdの両方を持つClientRepresentationのリストを返すこのapiを使用してIDを取得できます。Idを使用します

GET/{realm}/clients

`

4
ravthiru