2017-02-28 1 views
2

L'exemple utilisant CURL au https://keycloak.gitbooks.io/server-developer-guide/content/v/2.2/topics/admin-rest-api.html fonctionne pour moi lors de l'exécution de KeyCloak à partir de son image Docker. Pour passer à la forme cible finale de mon application, je veux m'authentifier en utilisant un identifiant client et un code secret plutôt qu'un nom d'utilisateur et un mot de passe.Appel de l'API Admin REST de KeyCloak à l'aide des secrets du client

Cependant, quand je passe les « comptes de service activés » client admin-cli vers, le type d'accès confidentiel et obtenir un jeton avec l'appel suivant:

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" 

Ce jeton provoque une erreur 403 de appels à l'API REST d'administration. Ai-je fait quelque chose de mal?

Répondre

0

Lors de l'authentification en tant que client de ce type, le compte de service du client doit se voir attribuer les rôles appropriés (par exemple 'admin'). Cela peut être fait sur l'onglet "Rôles du compte de service" dans l'administrateur KeyCloak pour le client.

0

Voilà comment j'implémenté client_credentials sur admin-cli:

  1. enable 'des comptes de service' comme vous le dites
  2. set 'Types d'accès' à des documents confidentiels - ce qui lui permet d'utiliser des client_secret et attribue le secret (Onglet Informations d'identification)
  3. sur l'onglet « Comptes de service », accorder le service compte du rôle de royaume-admin du rôle de client royaume gestion

Depuis que je faisais cela pour le client admin-cli dans un domaine spécifique, vous pouvez changer le royaume du « maître » à tout ce que votre royaume est, dans mon cas CEE-RLM:

http://192.168.101.139:8080/auth/realms/EEC-RLM/protocol/openid-connect/token

pour être complet, lorsque vous appelez la uri admin vous définissez l'en-tête d'autorisation pour « Bearer access_token » où access_token est le access_token renvoyé par l'uri/token, ci-dessus. Dans mon cas, je l'appelle:

http://192.168.101.139:8080/auth/admin/realms/EEC-RLM/users

La documentation est pas nécessairement particulièrement claire quand elle concerne les URL réelles appeler: Je pensais au départ que ces opérations étaient toujours sur le domaine maître, par exemple, ce qui est l'affaire.