【问题标题】:JWT tokens on .NET based on Active Directory基于 Active Directory 的 .NET 上的 JWT 令牌
【发布时间】:2020-05-07 01:07:55
【问题描述】:

Active Directory 和身份验证通常不是我认为自己是专家的领域。不幸的是,维护大型 .NET 服务器应用程序的任务落在了我身上,我的客户有一个问题需要我回答。

.NET 应用程序使用 Active Directory 来验证帐户。在初始登录时,它会使用 JwtSecurityTokenHandler 生成一个 JWT 令牌。我可以看出令牌的生命周期设置为 60 天,并且我可以看到后续请求在哪里解码传入的令牌以验证请求。

我的客户的问题是:如果他们从 Active Directory 中删除用户,而该用户拥有有效的 JWT 令牌,会发生什么情况?令牌会在创建日期后 60 天到期之前继续工作,还是会立即停止工作?

我对 JWT 机制的模糊理解表明,服务器只是确保令牌正确签名并且在发出请求时不会过期。我认为它不会针对每个请求重新验证 Active Directory 的身份。至少,我不相信 Active Directory 交互是 JwtSecurityTokenHandler 的一部分;如果我们这样做,则必须在验证令牌之后发生。这是正确的吗?

大多数应用程序如何处理这个问题 - 验证针对 AD 的每个入站请求以确保帐户仍然有效是否合理,还是会增加太多开销?

谢谢, 弗兰克

【问题讨论】:

    标签: .net active-directory jwt


    【解决方案1】:

    JWT 是一个自包含的访问令牌。一经发出,在过期前不能撤销。是的,即使在用户从 Active Directory 中删除直到过期后,您仍可以使用颁发的 JWT 访问令牌访问授权资源。为了克服这个问题,在身份验证过程中还会使用 JWT 发出一个刷新令牌。可以随时撤销刷新令牌。因此,如果用户从 Active Directory 中删除,刷新令牌将被撤销。

    遵循的最佳做法是将访问令牌有效期设置为较短的时间,并在过期后刷新(这是静默完成的)。刷新令牌将发送访问/刷新令牌对以获取新的访问/令牌对。

    每次使用刷新令牌时都会对其进行验证。因此,如果用户已从活动目录中删除,则在请求新令牌时,刷新令牌将无效并且无法获得新的令牌对。结果,用户将被注销。

    通过您的方案,我的建议是将令牌到期时间减少到更短的时间,例如 30 分钟 - 60 分钟。这不会对您的应用程序的性能产生巨大影响。

    Reference for more details about tokens

    【讨论】:

      猜你喜欢
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 2020-01-03
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 2015-06-17
      相关资源
      最近更新 更多