La richiesta PUT di Keycloak restituisce 401 (non autorizzato)

Jan 21 2021

Sto usando Postman e ho provato ad aggiornare il profilo di un utente tramite http: // localhost: 8180 / auth / admin / realms / demo / users / {userID} ma ho ricevuto una 401risposta.

La procedura che ho usato:

  • Token di amministrazione richiesto e ricevuto tramite http: // localhost: 8180 / auth / realms / master / protocol / openid-connect / token

  • Token aggiunto per richiedere le intestazioni nel modo appropriato, ad es.

  • Invia richiesta Put con il tipo di contenuto Json e le informazioni dell'utente come corpo tramite http: // localhost: 8180 / auth / admin / realms / demo / users / {userID}.

Sfortunatamente, ho ricevuto 401 risposte consecutive.

Prima richiesta:

-Body (x-www-form-urlencoded)

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

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

Seconda richiesta:

-Intestazione -> Autorizzazione: Portatore ...

-Corpo (JSON)

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

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

Risposte

1 dreamcrash Jan 22 2021 at 03:58

Nella tua prima chiamata, l' davidutente deve essere uno con privilegi di amministratore . Altrimenti, si ottiene una risposta di errore autorizzata per le azioni che l' davidutente non ha i privilegi per eseguire. Dai un'occhiata a questo thread SO per verificare come assegnare privilegi di amministratore a un utente.

Per ora richiediamo un token per conto dell'utente amministratore principale come segue:

dalla risposta del corpo estrarre il file access_token.

Per la seconda chiamata prima, copia e incolla access_tokenil Authorization > Type Bearer Token:

Alla seconda chiamata, invece di

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

è necessario sostituire il userIDparametro con l'effettivo userIDdell'utente che si sta aggiornando. Per ottenerlo userIDpuoi chiamare il seguente endpoint:

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

oppure puoi copiare e incollare dalla Keycloak Admin Console, nella scheda utenti:

Quindi in Postman apparirebbe come: