Żądanie PUT Keycloak zwraca 401 (nieautoryzowane)

Jan 21 2021

Używam programu Postman i próbowałem zaktualizować profil użytkownika przez http: // localhost: 8180 / auth / admin / realms / demo / users / {userID}, ale otrzymałem 401odpowiedź.

Procedura, którą zastosowałem:

  • Żądany i odebrany token administratora przez http: // localhost: 8180 / auth / realms / master / protocol / openid-connect / token

  • Dodano token do żądania nagłówków w odpowiedni sposób, np. Authorization: Bearer {access_token}

  • Wysłano żądanie Put z typem zawartości Json i informacjami o użytkowniku jako treści za pośrednictwem adresu http: // localhost: 8180 / auth / admin / realms / demo / users / {userID}.

Niestety, otrzymałem odpowiedzi 401 równolegle.

Pierwsza prośba:

-Body (x-www-form-urlencoded)

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

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

Drugie żądanie:

-Header -> Authorization: Bearer ...

-Body (JSON)

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

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

Odpowiedzi

1 dreamcrash Jan 22 2021 at 03:58

W pierwszym połączeniu davidużytkownik musi mieć takie same uprawnienia administratora . W przeciwnym razie uzyskuje się autoryzowaną odpowiedź na błąd dla działań, do których wykonania davidużytkownik nie ma uprawnień. Spójrz na ten wątek SO, aby sprawdzić, jak przypisać użytkownikowi uprawnienia podobne do administratora .

Na razie poprośmy o token w imieniu głównego administratora w następujący sposób:

z odpowiedzi ciała wyodrębnij plik access_token.

W przypadku drugiego połączenia najpierw skopiuj i wklej access_tokendo Authorization > Type Bearer Token:

Podczas drugiego połączenia zamiast

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

musisz zamienić userIDparametr na rzeczywisty userIDużytkownika, którego aktualizujesz. Aby uzyskać userID, możesz wywołać następujący punkt końcowy:

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

lub możesz skopiować i wkleić z Keycloak Admin Console, w zakładce użytkownicy:

Więc w Postmanie wyglądałoby to tak: