提问人:divad 提问时间:1/21/2021 最后编辑:dreamcrashdivad 更新时间:11/12/2023 访问量:3030
Keycloak PUT请求返回401(未经授权)
Keycloak PUT-request returns 401 (unauthorized)
问:
我正在使用 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}
答:
更新:该路径从 Keycloak 17 Quarkus 发行版开始被删除。因此,您可能需要删除此答案中显示的终结点调用。/auth
/auth
在第一次通话中,用户必须是具有类似管理员权限的用户。否则,对于用户无权执行的操作,将获得授权的错误响应。请查看此 SO 线程,了解如何为用户分配类似管理员的权限。david
david
现在,让我们代表主管理员用户请求令牌,如下所示:
从身体响应中提取 .access_token
对于第二个调用,首先将 复制并粘贴到 :access_token
Authorization > Type Bearer Token
在第二次通话时,而不是
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管理控制台的“用户”选项卡下复制并粘贴:
所以在Postman中会看起来像:
评论