A solicitação PUT do Keycloak retorna 401 (não autorizado)

Jan 21 2021

Estou usando o carteiro e tentei atualizar o perfil de um usuário via http: // localhost: 8180 / auth / admin / realms / demo / users / {userID}, mas recebi uma 401resposta.

O procedimento que usei:

  • Solicitou e recebeu o token de administrador via http: // localhost: 8180 / auth / realms / master / protocol / openid-connect / token

  • Adicionado token para solicitar cabeçalhos da maneira apropriada, ou seja, Autorização: Bearer {access_token}

  • Solicitação Put enviada com o tipo de conteúdo Json e as informações do usuário como corpo via http: // localhost: 8180 / auth / admin / realms / demo / users / {userID}.

Infelizmente, recebi 401 respostas consecutivas.

Primeiro pedido:

-Body (x-www-form-urlencoded)

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

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

Segundo pedido:

-Header -> Autorização: Portador ...

-Corpo (JSON)

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

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

Respostas

1 dreamcrash Jan 22 2021 at 03:58

Em sua primeira chamada, o davidusuário deve ter privilégios semelhantes aos de administrador . Caso contrário, obtém-se uma resposta de erro autorizada para as ações que o davidusuário não tem privilégios para executar. Dê uma olhada neste tópico do SO para verificar como atribuir privilégios semelhantes aos de administrador a um usuário.

Por enquanto, vamos solicitar um token em nome do usuário administrador mestre da seguinte maneira:

da resposta do corpo extrair o access_token.

Para a segunda chamada primeiro, copie e cole o access_tokenem Authorization > Type Bearer Token:

Na segunda chamada, em vez de

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

você precisa substituir o userIDparâmetro com o real userIDdo usuário que você está atualizando. Para obter, userIDvocê pode ligar para o seguinte endpoint:

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

ou você pode copiar e colar do Admin Console do Keycloak, na guia usuários:

Portanto, no Postman seria semelhante a: