web-dev-qa-db-fra.com

Comment obtenir le secret du client via l'API Keycloak?

Comment obtenir le secret du client via l'API Keycloak?

Dans la documentation, je vois:

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

Mon code est le suivant:

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

J'ai toujours une erreur 401.

Qu'est-ce que je fais mal?

8
president

Je pense que votre authentification ne fonctionne pas.

  1. Vous avez besoin d'un jeton. Vous pouvez générer en utilisant OpenID (voir docs ).
  2. Avec le jeton (par autorisation d'en-tête), vous pouvez faire une demande à l'API.

Exemple:

Obtenez le jeton

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)

Demande à l'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"})
3

{id} dans l'URL n'est pas clientId, il est différent de clientId. c'est un identifiant unique keycloak (qui est uuid) quelque chose comme 628e4b46-3d79-454f-9b1c-e07e86ee7615

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

Vous pouvez obtenir id en utilisant cette API, où elle retourne la liste de ClientRepresentation, qui a à la fois Id et clientId, utilisez Id

GET/{realm}/clients

"

4
ravthiru