Keycloak PUT-request 返回 401(未经授权)

时间:2021-01-21 15:47:56

标签: java spring-boot postman keycloak keycloak-rest-api

我正在使用邮递员,我尝试通过 http://localhost:8180/auth/admin/realms/demo/users/{userID} 更新用户的个人资料,但我收到了 401 响应。< /p>

我使用的程序:

  • 通过 http://localhost:8180/auth/realms/master/protocol/openid-connect/token 请求和接收管理令牌

  • 以适当的方式添加令牌以请求标头,即授权:Bearer {access_token}

  • 通过 http://localhost:8180/auth/admin/realms/demo/users/{userID} 发送带有 Json 内容类型和用户信息的 Put 请求。

很遗憾,我收到了连续的 401 回复。

第一个请求:

-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

第二个请求:

-Header -> Authorization: Bearer ...

-正文(JSON)

"email": "d@gmail.com",
"firstName": "divad",
"lastName": "d"

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

1 个答案:

答案 0 :(得分:1)

在您的第一次通话中,david 用户必须是具有 admin-alike 权限的用户。否则,对于 david 用户无权执行的操作,将获得授权错误响应。查看 this SO thread 以检查如何为用户分配类似管理员权限。

现在让我们代表 master 管理员用户请求令牌,如下所示:

enter image description here

从正文响应中提取 access_token

对于第一次调用,将 access_token 复制并粘贴到 Authorization > Type Bearer Token

enter image description here

在第二次调用时,而不是

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

您需要将 userID 参数替换为您要更新的用户的实际 userID。要获得 userID,您可以调用以下端点:

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

或者您可以从 Keycloak 管理控制台的标签用户下复制和粘贴:

enter image description here

所以在 Postman 中看起来像:

enter image description here