Keycloak PUT请求返回401(未经授权)

Keycloak PUT-request returns 401 (unauthorized)

提问人:divad 提问时间:1/21/2021 最后编辑:dreamcrashdivad 更新时间:11/12/2023 访问量:3030

问:

我正在使用 postman,并尝试通过 http://localhost:8180/auth/admin/realms/demo/users/{userID} 更新用户的个人资料,但我收到了回复。401

我使用的程序:

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

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

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

不幸的是,我收到了背靠背的 401 回复。

第一个请求:

-正文(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

第二个要求:

-标头 -> 授权:持有者 ...

-正文(JSON)

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

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

java spring-boot 邮递员 keycloak 键cloak-rest-api

评论


答:

2赞 dreamcrash 1/22/2021 #1

更新:该路径从 Keycloak 17 Quarkus 发行版开始被删除。因此,您可能需要删除此答案中显示的终结点调用。/auth/auth


在第一次通话中,用户必须是具有类似管理员权限的用户。否则,对于用户无权执行的操作,将获得授权的错误响应。请查看此 SO 线程,了解如何为用户分配类似管理员的权限。daviddavid

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

enter image description here

从身体响应中提取 .access_token

对于第二个调用,首先将 复制并粘贴到 :access_tokenAuthorization > Type Bearer Token

enter image description here

在第二次通话时,而不是

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

您需要将该参数替换为要更新的用户的实际值。若要获取,可以调用以下终结点:userIDuserIDuserID

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

或者您可以从Keycloak管理控制台的“用户”选项卡下复制并粘贴:

enter image description here

所以在Postman中会看起来像:

enter image description here