【问题标题】:403 errors with keycloak APIkeycloak API 出现 403 错误
【发布时间】: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/usershttps://auth-mycompany.com/auth/admin/realms/mycompany/users 上执行 GET 时;我收到 403 错误。

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

感谢您的帮助。

【问题讨论】:

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

标签: realm keycloak


【解决方案1】:

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

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

【讨论】:

  • 请写出完整答案并附上详细解释。
  • @SubodhJoshi 既然我有一个可行的解决方案,我就这样做了。谢谢你的帮助!!
猜你喜欢
  • 2019-10-12
  • 2021-02-05
  • 1970-01-01
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 2020-06-11
  • 2016-10-27
  • 1970-01-01
相关资源
最近更新 更多