keycloak API 出现 403 错误

Posted

技术标签:

【中文标题】keycloak API 出现 403 错误【英文标题】:403 errors with keycloak API 【发布时间】:2020-07-10 19:30:58 【问题描述】:

我正在尝试使用 Keycloak API(通过 keycloak-admin 库在节点中),但我系统地收到错误 403。

我通过库成功获得了访问令牌;通过调用/auth/realms/master/protocol/openid-connect/token(在主领域)。

当我查看我的令牌时,我似乎拥有能够查询用户的正确角色:

 "jti": "xx-..", "exp": 1585561478, "nbf": 0, "iat": 1585561418, "iss": "https://auth-mycompany.com/auth/realms/master", "aud": "mycompany-realm", "sub": "xx-..", "typ": "Bearer", "azp": "admin-cli", "auth_time": 0, "session_state": "xx-..", "acr": "1", "resource_access":  "mycompany-realm":  "roles": [ "view-users", "query-groups", "query-users" ]  , "scope": "email profile", "email_verified": true, "name": "myname", "preferred_username": "myname", "given_name": "my name", "email": "myemail@mycompany.com" 

但是,当我在 https://auth-mycompany.com/auth/admin/realms/master/users 或 https://auth-mycompany.com/auth/admin/realms/mycompany/users 上执行 GET 时;我收到 403 错误。

也许它与我的令牌的“aud”相关联?为什么我在查询主域时得到一个带有 "aud": "mycompany-realm" 的令牌?

感谢您的帮助。

【问题讨论】:

aud 表示访问令牌的受众字段,所以没有错。从master 领域获取令牌并再次触发相同的查询,看看它是否工作。 我还以为我已经拿到了主域的令牌……为什么你认为它不是来自主域的令牌?在 keycloak 日志中,我可以在主域上看到相应的 LOGIN 事件。 正确领域的正确令牌,令牌的寿命是多少? 令牌长一分钟;当我调用 /users 端点时它没有过期.. 所以你没有任何单一的 rest-api 使用这个令牌?如果不尝试使用 admin-cli 工具,是否可以创建新领域或用户? 【参考方案1】:

我最终意识到这是因为我已经为管理端点实现了Port Restriction。如文档中所述,所有以/auth/admin 开头的端点都会获得403 响应。相反,这些端点可以通过另一个无法通过 Internet 访问的端口(例如 9991)访问。

我做了什么来解决我的问题:因为我的 Nodejs 服务和我的 keycloak 服务器都在同一个 kubernetes 集群上运行,所以我更改了我的 authUrl keycloak 服务器,其服务名称为http://servicename.namespace.svc.cluster.local:9991/auth

【讨论】:

请写出完整答案并附上详细解释。 @SubodhJoshi 既然我有一个可行的解决方案,我就这样做了。谢谢你的帮助!!

以上是关于keycloak API 出现 403 错误的主要内容,如果未能解决你的问题,请参考以下文章

Keycloak-angular:访问/帐户失败,出现 403 错误和 CORS 消息

KeyCloak用户rest api返回403禁止,为啥?

Keycloak REST API 403 被禁止

在创建 keycloak 用户时收到带有 "error":"unknown_error" 消息的 403 错误

使用 api 密钥使用 Web API 时,出现以下错误 - 远程服务器返回错误:(403) Forbidden

MapMyFitness API 请求出现错误 403