Keycloak PUT-request renvoie 401 (non autorisé)

Jan 21 2021

J'utilise Postman et j'ai essayé de mettre à jour le profil d'un utilisateur via http: // localhost: 8180 / auth / admin / realms / demo / users / {userID} mais j'ai reçu une 401réponse.

La procédure que j'ai utilisée:

  • Jeton d'administration demandé et reçu via http: // localhost: 8180 / auth / realms / master / protocol / openid-connect / token

  • Ajout d'un jeton pour demander les en-têtes de la manière appropriée, à savoir Autorisation: Bearer {access_token}

  • Envoyé une requête Put avec le type de contenu Json et les informations de l'utilisateur comme corps via http: // localhost: 8180 / auth / admin / realms / demo / users / {userID}.

Malheureusement, j'ai reçu 401 réponses consécutives.

Première demande:

-Body (x-www-form-urlencoded)

client_id : admin_cli
username: ...
password: ...
grant_type: password
client_secret: ...

http://localhost:8180/auth/realms/master/protocol/openid-connect/token

Seconde demande:

-Header -> Autorisation: Porteur ...

-Corps (JSON)

"email": "[email protected]",
"firstName": "divad",
"lastName": "d"

http://localhost:8180/auth/admin/realms/demo/users/{userID}

Réponses

1 dreamcrash Jan 22 2021 at 03:58

Lors de votre premier appel, l' davidutilisateur doit être un utilisateur avec des privilèges d'administrateur. Sinon, on obtient une réponse d'erreur autorisée pour les actions que l' davidutilisateur n'a pas les privilèges à effectuer. Jetez un œil à ce fil de discussion SO pour vérifier comment attribuer des privilèges d'administrateur à un utilisateur.

Pour l'instant, demandons un jeton au nom de l' utilisateur administrateur principal comme suit:

à partir de la réponse du corps, extraire le fichier access_token.

Pour le deuxième appel en premier, copiez et collez le access_tokendans le Authorization > Type Bearer Token:

Au deuxième appel, au lieu de

http://localhost:8180/auth/admin/realms/demo/users/{userID} 

vous devez remplacer le userIDparamètre par le réel userIDde l'utilisateur que vous mettez à jour. Pour obtenir, userIDvous pouvez appeler le point de terminaison suivant:

GET <YOUR_KEYCLOAK_DOMAIN>/auth/admin/realms/<YOUR_REALM>/users/?username=<THE_USERNAME>

ou vous pouvez copier et coller à partir de la console d'administration Keycloak, sous l'onglet utilisateurs:

Donc, dans Postman ressemblerait à: