【问题标题】:WSO2 Federated IDP RefreshToken with invalid username用户名无效的 WSO2 联合 IDP RefreshToken
【发布时间】:2019-08-07 15:51:38
【问题描述】:

社区。 我正在使用 WSO2 IS 5.7.0 将 Angular 应用程序与外部 IDP 集成。 外部 IDP 使用 SAML2 配置,服务提供商入站身份验证使用 Oauth/OpenID 设置。 服务提供商使用联合身份验证与 IDP 通信。

来自 IDP 的用户 uid 与声明用户 ID 匹配,因此当我请求 oauth 令牌时,我获得了正确的范围(匹配配置了角色的本地用户)以将令牌与 WSO2 AM 一起使用。当我使用代码授权获得初始 oauth 令牌时,这运行良好。 如果我自省此令牌,我可以根据与本地用户 XXXXXXXX 关联的角色验证该令牌属于用户名 XXXXXXXX,并且范围是在 WSO2 AM 上使用 API 的范围。

问题是当刷新令牌用于在过期后获取新的访问令牌时。新的访问令牌具有相同的范围,但我无法使用与第一个令牌一起使用的 API。每次通话时我都会收到 403 Forbidden,AM 日志显示: WARN - APIAuthenticationHandler API 身份验证失败,由于凭据无效 (第一个WARN只出现一次) WARN - APIAuthenticationHandler API 身份验证失败,原因是访问令牌不允许您访问请求的资源 (此警告出现在后续调用中)

如果我自省收到的令牌,我可以看到与原始访问令牌相同的范围,但用户名不同: 联邦/XXXXXXXX@carbon.super.

我认为令牌信息上的用户名更改会导致 403 错误。

如果我在本地和出站身份验证配置上激活服务提供商选项“在本地主题标识符中使用租户域”,问题会变得最严重。在这种情况下,每次我使用刷新令牌请求新令牌时,租户都会在无限循环中附加到用户名: XXXXXXXXX@carbon.super@carbon.super@carbon.super@carbon.super 在我获得的每个令牌上,内省都会向我显示另一个 @carbon.super 附加到实际令牌的用户名。在这种情况下,FEDERATED/ 并不总是出现在用户名上。

我希望与刷新令牌关联的用户名与第一个访问令牌上的用户名相同。

是否有解决此问题的配置或这是一个错误?在 WSO2 IS 的新版本上解决了吗? (对不起我的英语)

谢谢!

【问题讨论】:

  • 欢迎来到 SO。要获得好的答案,请查看:如何创建最小的、可重现的示例 提出问题时,如果您提供他们易于理解并用于重现问题的代码,人们将能够更好地提供帮助。这被称为创建一个最小的、可重现的示例 (reprex)、一个最小的、完整的和可验证的示例 (mcve) 或一个最小的、可工作的示例 (mwe)。 - stackoverflow.com/help/minimal-reproducible-example

标签: wso2 wso2is


【解决方案1】:

报告了类似问题[1],并通过 PR[2] 修复。

[1]https://github.com/wso2/product-is/issues/4472

[2]https://github.com/wso2-extensions/identity-inbound-auth-oauth/pull/1022

如果您没有 WSO2 订阅,升级到 5.8.0 将解决此问题。

【讨论】:

  • 谢谢,塔努亚!那太棒了!但是解决了我的次要问题,主要问题是刷新令牌获得的令牌上的“FEDERATED/”。我实际上找到了解决主要问题的方法,我希望在发布解决方案之前进行一些测试。解决方法是根据实际实现对 oauth2 RefreshGrantHandler 进行自定义实现。在方法“createAccessTokenBean”上,我验证 userStoreDomain 是否为“FEDERATED”并将其更改为“”空字符串。有了这些信息,新的令牌就会被创建并引用正确的用户
猜你喜欢
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-18
相关资源
最近更新 更多