【问题标题】:Failure in obtaining new access token after expiration of old token using WSO2 Identity Server使用 WSO2 身份服务器在旧令牌到期后获取新访问令牌失败
【发布时间】:2019-12-30 23:41:43
【问题描述】:

在访问令牌到期时,我遇到了一个特殊的问题,有时我的调用失败并出现 401 错误(访问令牌已过期)。如您所料,我应该通过 OAuth2TokenRelayFilter 使用 refresh_token 授权获得一个新令牌。这一直有效,直到令牌停止刷新的某个点。奇怪的是在检查中我发现过期的令牌不是之前使用的令牌,它是程序运行时发布的第一个令牌。 任何帮助将不胜感激。

【问题讨论】:

    标签: wso2 wso2is


    【解决方案1】:

    访问令牌有一些到期时间。但是您可以在服务提供商级别配置访问令牌的到期时间。

    在服务提供者级别https://docs.wso2.com/display/IS580/Configuring+OAuth2-OpenID+Connect+Single-Sign-On配置访问令牌和刷新令牌到期时间请参考此文档

    当当前访问令牌过期或需要新的访问令牌时,可以使用刷新令牌授权。当刷新授权用于获取访问令牌时,刷新令牌会被更新。在 WSO2 身份服务器中,为具有新到期时间的刷新授权发出新的刷新令牌,并且之前的刷新令牌处于非活动状态并且不能再使用。

    在 identity.xml 文件中有一个 RenewRefreshTokenForRefreshGrant 配置来禁用此属性。默认情况下,此 RenewRefreshTokenForRefreshGrant 配置启用为 true。

    因此,对于每个刷新授权请求,先前的刷新令牌都将变为非活动状态,并且将发出一个带有新访问令牌的新刷新令牌。如果您不想为每个请求更新刷新令牌,您可以禁用 identity.xml 文件中的配置,如下所示。由于此 RenewRefreshTokenForRefreshGrant 属性,如果您使用之前发布的刷新令牌将变为非活动状态,并且您无法使用该刷新令牌进行刷新以进一步访问令牌。

    <RenewRefreshTokenForRefreshGrant>false</RenewRefreshTokenForRefreshGrant>

    请参阅此文档以进一步了解刷新令牌https://docs.wso2.com/display/IS580/Refresh+Token+Grant

    【讨论】:

    • 您好,感谢您的回复。我实际上已经实现了上述两个。我的问题是一个具体案例。在访问令牌过期后的正常情况下,使用刷新令牌生成一个新令牌,这对我有用几次,之后它停止工作。它说访问令牌已过期,并且发生的一些奇怪的事情不是使用最后一个令牌失败,而是使用本次运行中发布的第一个令牌失败。
    • Access_token 将在过期时间后过期。这是预期的行为。您能否详细说明一下“它说访问令牌已过期并且发生的一些奇怪的事情不是使用最后一个令牌失败,而是使用本次运行中发布的第一个令牌失败”?
    • 假设我的 access_token 到期时间为 5 分钟。另外我应该提到我正在使用一个自包含的access_token。所以我得到一个access_token“A”并刷新令牌“B”。 5 分钟后,它使用 refresh_token "B" 生成新的 access_token "C" 和 refresh_token "D"。 5分钟后,它使用refresh_token“D”生成一个新的access_token“E”和refresh_token“F”。它继续这样,完美地工作,直到一段时间后它停止工作。在 chrome 浏览器中,我可以看到“访问令牌已过期:A”。不是最后一个令牌,而是第一个令牌。控制台上也没有错误..
    猜你喜欢
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    相关资源
    最近更新 更多