【问题标题】:DX10223: Lifetime validation failedDX10223:终身验证失败
【发布时间】:2018-02-28 00:32:45
【问题描述】:

我有使用 IdentityServer4 netstandard2.0 的原型 Visual Studio 解决方案:

  • IdentityServer (asp.net core mvc)
    • AllowedGrantTypes = GrantTypes.HybridAndClientCredentials
    • RefreshTokenUsage = TokenUsage.ReUse
    • RefreshTokenExpiration = TokenExpiration.Sliding
  • Web 项目(asp.net core mvc)
  • API 项目(asp.net core mvc)

有时,在加入 API 项目时,我会遇到以下错误:

DX10223:终身验证失败。令牌已过期。

如何以及在哪里可以刷新令牌?

API项目是否可以刷新token?

【问题讨论】:

  • 尝试检查服务器时区和当前时间设置。令牌可用 1 小时,使用错误的时间设置可能会比预期更快地过期令牌。
  • 如果我不想在用户断开连接之前过期?
  • 您可以考虑使用AspNet.Security.OpenIdConnect.Server 代替Microsoft.Owin.Security.OpenIdConnect。此问题与 OAuth 令牌有效性有关,请检查令牌是否具有适当的过期时间(我不太了解 OAuth 令牌过期是如何工作的)。

标签: c# asp.net-mvc identityserver4


【解决方案1】:

令牌具有有限的生命周期。它们将在某个时候过期。

刷新令牌是某些应用程序类型无需直接用户交互即可请求新访问令牌的机制。

此处描述了刷新令牌相关设置: https://identityserver4.readthedocs.io/en/release/topics/refresh_tokens.html

您通过将刷新令牌发送到令牌端点来刷新令牌。这将返回一个新的访问令牌。

https://www.rfc-editor.org/rfc/rfc6749#section-6

IdentityModel 库有一个 TokenClient 类,它在 C# 中包装了令牌端点交互

https://github.com/IdentityModel/IdentityModel2

【讨论】:

  • 非常感谢。但是你有没有更新我的 Web 项目和我的 API 项目的声明的示例?
  • 这句话没有意义。
  • 是的,很抱歉我迷路了。我通过在我的 Web 项目中添加按间隔调用刷新的隐藏 iframe 找到了解决方案。因此令牌在到期前被更新。现在我的网络用户可以在同一页面上停留几天,并自动调用 ajax Api 项目。感谢您的帮助和长久的安全保障!
【解决方案2】:

正如@Tetsuya Yamamoto 所说 - 首先检查时区和时间设置。无论如何,您可以在配置中设置身份服务器客户端令牌的生命周期,例如:“AccessTokenLifetime”:86400

【讨论】:

    猜你喜欢
    • 2016-04-03
    • 2014-01-24
    • 1970-01-01
    • 2016-10-25
    • 1970-01-01
    • 2022-01-11
    • 2014-05-23
    相关资源
    最近更新 更多