ASP.NET 核心中是不是支持刷新令牌?

Posted

技术标签:

【中文标题】ASP.NET 核心中是不是支持刷新令牌?【英文标题】:Is there any support of refresh token in ASP.NET core?ASP.NET 核心中是否支持刷新令牌? 【发布时间】:2019-09-23 21:10:12 【问题描述】:

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

在搜索网络时,我有found,在Microsoft.AspNetCore.Authentication 中存在一个名为HttpContext.GetTokenAsync() 的方法。另外this question 和this question 在 SO 上讨论类似的想法;但我仍然不确定他们使用的是什么组件或实现。并且,刷新令牌存储在哪里。在数据库中?另一个地方?

【问题讨论】:

【参考方案1】:

GetTokenAsync 是位于Microsoft.AspNetCore.Authentication.Abstractions 包中的扩展。

Here's 一些可用于在客户端更新令牌的代码。

如果您正在寻找 OpenId Connect 实现,请查看 IdentityServer4。其他解决方案:Community OSS authentication options for ASP.NET Core

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

另一种方法是使用存储在数据库中的“一次性”代码。一旦使用,该代码将被替换为新代码。这允许服务器撤销刷新令牌(只需将其从存储中删除)。

我不确定这是否涵盖了您的所有问题,所以如果有什么遗漏或不清楚,请告诉我。

【讨论】:

感谢您的回答。在我的情况下,我打算有两个单独的令牌:一个用于访问令牌,另一个用于刷新令牌。使用刷新令牌的原因是我想要撤销能力。只是想是否存在现成的实现。 IdentityServer4 是 oauth2/oidc 的实现。看看specifications。它有服务器端refresh token 处理。 IdentityServer4 实现了类似的访问令牌机制,Reference Token:IdentityServer 会将令牌的内容存储在数据存储中,并且只会将此令牌的唯一标识符发回给客户。然后,接收此引用的 API 必须打开与 IdentityServer 的反向通道通信以验证令牌。 感谢您的评论,但 IdentityServer 是单独的服务器,而我想处理自己应用程序中的所有部分。我只想要一个应用程序而不是两个。

以上是关于ASP.NET 核心中是不是支持刷新令牌?的主要内容,如果未能解决你的问题,请参考以下文章

如何撤销存储在 Identity Server 数据库中的 asp net core 中的刷新令牌

在 ASP.NET MVC 中过期后刷新访问令牌

使用 AspNetUserTokens 表在 ASP.NET Core Web Api 中存储刷新令牌

如何在 asp.net 中生成刷新令牌?

ASP.NET Core 中基于令牌的身份验证(刷新)

通过 Auth0 React 和 ASP.net 核心授权然后使用 JWT 令牌