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

Posted

技术标签:

【中文标题】Keycloak PUT 请求返回 401(未经授权)【英文标题】:Keycloak PUT-request returns 401 (unauthorized) 【发布时间】:2021-04-26 01:55:36 【问题描述】:

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

我使用的程序:

通过 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 -> 授权:Bearer ...

-正文(JSON)

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

-致http://localhost:8180/auth/admin/realms/demo/users/userID

【问题讨论】:

【参考方案1】:

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

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

从正文响应中提取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 中会是这样的:

【讨论】:

以上是关于Keycloak PUT 请求返回 401(未经授权)的主要内容,如果未能解决你的问题,请参考以下文章

Keycloak Kubernetes 401 未经授权

使用 Coldfusion/Railo 向 Mailchimp API v3.0 发送 PUT 请求时出现 401 未经授权的错误

React - 带有标头的 ajax GET 请求仍返回 401(未经授权)

Angular 6 对 .NET Web API 的跨域 POST 请求返回 401(未经授权)

Django Tastypie 总是返回 401 未经授权

C#使用HttpWebRequest请求url出现远程服务器返回一个错误:401未经授权