ASP.NET Core是否支持刷新令牌?

3

我需要在一个ASP.NET Core应用程序中使用刷新令牌。目前,我已经实现了刷新/访问令牌。在我的实现中,刷新令牌及其过期日期与数据库中的User实体一起存储。刷新令牌可以用来生成新的访问令牌,而无需使用用户名/密码。这个方法很好用,但我想知道ASP.NET Core本身或第三方包例如Open Id Connect是否有刷新令牌的实现。该应用程序基于JWTASP.NET Identity

在搜索网页时,我发现了一个名为HttpContext.GetTokenAsync()的方法,该方法位于Microsoft.AspNetCore.Authentication中。此外,这个问题这个问题在SO上讨论了类似的想法; 但我仍然不确定他们使用的组件或实现是什么。以及,刷新令牌存储在哪里?是在数据库中吗?还是其他地方?

1个回答

3

GetTokenAsync 是一个扩展方法,位于 Microsoft.AspNetCore.Authentication.Abstractions 包中。

以下是一些可用于客户端令牌续订的代码,戳这里

如果您正在寻找 OpenId Connect 的实现,请查看 IdentityServer4。对于其他解决方案:ASP.NET Core 社区 OSS 认证选项

刷新令牌有不同的策略。您可以使用自包含的令牌,无需在服务器上存储。客户端可以使用此令牌直到过期。此令牌无法撤销。

另一个选择是使用存储在数据库中的“一次性”代码。一旦使用,该代码将被替换为新代码。这允许服务器撤销刷新令牌(通过从存储中删除它即可)。

我不确定是否覆盖了您所有的问题,如果有遗漏或不清楚的地方,请告诉我。


感谢您的回答。在我的情况下,我打算使用两个单独的令牌:一个用于访问令牌,另一个用于刷新令牌。使用刷新令牌的原因是我想要撤销权限的能力。只是想知道是否存在现成的实现。 - Afshar Mohebi
1
IdentityServer4是oauth2/oidc的一种实现。请查看规范。它具有服务器端刷新令牌处理功能。 - user4864425
IdentityServer4 实现了一种类似的访问令牌机制,即参考令牌IdentityServer 将在数据存储中存储令牌内容,并仅向客户端发放此令牌的唯一标识符。接收此参考的 API 必须打开与 IdentityServer 的后通道通信以验证令牌。 - user4864425
1
谢谢您的评论,但是IdentityServer是一个独立的服务器,而我想在自己的应用程序中处理所有部分。我只想要一个应用程序,而不是两个。 - Afshar Mohebi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接