【问题标题】:Why is the refresh-token expiration not renewed in IdentityServer persistedgrants?为什么 IdentityServer persistedgrants 中没有更新刷新令牌到期?
【发布时间】:2021-03-16 16:08:35
【问题描述】:

我正在使用 .NET Core 和 IdentityServer4 来创建访问令牌。这些访问令牌还包括一个刷新令牌,可用于请求新的访问令牌。由于一些用户报告说他们过早退出,我在本地环境中进行了测试。我将访问令牌生命周期设置为 10 秒,将刷新令牌生命周期设置为 30 秒。预期的行为是,只要您在 30 秒以下请求新令牌,您就会一直登录。然后我每隔几秒钟发送一个请求。刷新令牌每 10 秒请求一个新的访问令牌。为此,我使用扩展方法“RequestRefreshTokenAsync”。但这仅适用于最大值。 3次:

04.12.2020 15:09:02 Using refresh token iCmtHJa5jllqTkwUexI9ZMLGN0RQhqvXljun6AgR31M.
04.12.2020 15:09:02 Success, new refresh token T0R8BWfNwkBzBh_yDKzhqerzgRgxY9OZ3jWLG951-hc.
04.12.2020 15:09:13 Using refresh token T0R8BWfNwkBzBh_yDKzhqerzgRgxY9OZ3jWLG951-hc.
04.12.2020 15:09:13 Success, new refresh token W29SlwHP318d4NFaqRS5ZTJAUG-ugYMBQrV6-g6v1rk.
04.12.2020 15:09:23 Using refresh token W29SlwHP318d4NFaqRS5ZTJAUG-ugYMBQrV6-g6v1rk.
04.12.2020 15:09:23 Error: invalid_grant

在我发现这一点后,我还查看了 IdentityServer 的persistedgrants 表,似乎对于每个刷新的访问令牌,都存储了相同的 CreationTime 和 Expiration date:

ocDMiwVpOJrcWh5LmEPgzDnn15TED5FpxSEpXsXDMzY= 2020-12-04 15:08:51.000000 2020-12-04 15:09:21.000000
i+NjVCnMUoobpnaINoLrCGcQrWHloIaAHC4NHWwGyK4= 2020-12-04 15:08:51.000000 2020-12-04 15:09:21.000000
d9HjtUszofxOEcnV7w95dhn54rl8QI2IRq8UMZlKr1Y= 2020-12-04 15:08:51.000000 2020-12-04 15:09:21.000000

我期望的是,当我请求一个新的访问令牌时,显然新的刷新令牌也会获得一个新的到期日期。

有人知道我是否缺少特定设置或如何解决此问题?

【问题讨论】:

    标签: c# .net .net-core identityserver4 refresh-token


    【解决方案1】:

    我为解决这个问题所做的就是将您的刷新令牌设置为滑动到期。如果您在滑动到期之前请求新的访问令牌,则刷新令牌到期将被延长。这应该可以在您的身份服务器客户端设置中进行配置。在此处查看文档:http://docs.identityserver.io/en/release/topics/refresh_tokens.html

    【讨论】:

    • 我之前尝试过,但没有成功。但后来我注意到“生命周期不会超过 AbsoluteRefreshTokenLifetime。”。所以这个值太低了。一旦我将其设置为默认值(30 天),它就会起作用。感谢您的帮助和快速解答!
    猜你喜欢
    • 2019-03-16
    • 2016-10-07
    • 1970-01-01
    • 2016-05-30
    • 2017-01-18
    • 2017-07-13
    • 2021-12-21
    • 1970-01-01
    • 2021-04-07
    相关资源
    最近更新 更多