【问题标题】:Is it possible to somehow override or extend the token validation in Identity Server 4?是否有可能以某种方式覆盖或扩展 Identity Server 4 中的令牌验证?
【发布时间】:2021-07-16 20:11:48
【问题描述】:

我的移动应用程序的一些用户告诉我,他们有时会退出应用程序,并且在 Identity Server 中我收到一些关于刷新令牌的警告,如下所示:

[22:34:51 WRN] Invalid refresh token
[22:34:51 WRN] Refresh token validation failed. aborting, {"ClientId": ... 

我不知道为什么会这样。

有没有办法让这些日志更详细,但仅限于令牌验证部分而不是整个服务器? 如果没有,如果我可以扩展功能或其他东西,我想自己添加日志。

【问题讨论】:

    标签: c# identityserver4


    【解决方案1】:

    在 IdentityServer 中,您可以控制是否可以重用刷新令牌。如果客户端两次发送相同的刷新令牌,它可以强制用户退出。这是一项安全功能,建议您不要禁用此功能。

    可以阅读设置here

    RefreshTokenUsage
    
    ReUse
    
    the refresh token handle will stay the same when refreshing tokens
    
    OneTime
    
    the refresh token handle will be updated when refreshing tokens. This is the default.
    

    您还可以通过将日志记录级别设置为“调试”或“详细”来提高日志记录级别,以便更好地了解问题。

    会不会是同一个刷新令牌被发送了两次?

    【讨论】:

    • 可能会发送两次相同的刷新令牌,但我的情况发生在 RefreshTokenUsage 设置为 ReUse 的情况下。我在想,如果我将它设置为 OneTime,这会更频繁地发生,我仍然无法调试问题......
    • 在 IdentitytServer 中,您在哪里持久化/存储令牌?在数据库中?还是在记忆中?
    • 我在保存这些令牌的数据库中有一个表“persistedGrants”。
    • 尝试将调试级别提高到 Debug 或 Trace 以更好地了解它可能失败的原因。
    • 您可以在stackoverflow.com/questions/53255246/…stackoverflow.com/questions/53255246/… 中探索答案来查看已编辑的部分
    【解决方案2】:

    该错误表明您尝试使用相同的刷新令牌两次。你可以从DefaultRefreshTokenService 派生出你自己的实现。它有虚拟方法AcceptConsumedTokenAsync,可以用你自己的逻辑覆盖。通常,您希望已使用的刷新令牌在已使用后的一段时间内有效。

    您可以在docs 中阅读更多相关信息。

    【讨论】:

      猜你喜欢
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 2019-05-06
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      相关资源
      最近更新 更多