【发布时间】:2019-12-30 23:41:43
【问题描述】:
在访问令牌到期时,我遇到了一个特殊的问题,有时我的调用失败并出现 401 错误(访问令牌已过期)。如您所料,我应该通过 OAuth2TokenRelayFilter 使用 refresh_token 授权获得一个新令牌。这一直有效,直到令牌停止刷新的某个点。奇怪的是在检查中我发现过期的令牌不是之前使用的令牌,它是程序运行时发布的第一个令牌。 任何帮助将不胜感激。
【问题讨论】:
在访问令牌到期时,我遇到了一个特殊的问题,有时我的调用失败并出现 401 错误(访问令牌已过期)。如您所料,我应该通过 OAuth2TokenRelayFilter 使用 refresh_token 授权获得一个新令牌。这一直有效,直到令牌停止刷新的某个点。奇怪的是在检查中我发现过期的令牌不是之前使用的令牌,它是程序运行时发布的第一个令牌。 任何帮助将不胜感激。
【问题讨论】:
访问令牌有一些到期时间。但是您可以在服务提供商级别配置访问令牌的到期时间。
在服务提供者级别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
【讨论】: