首页 > 解决方案 > 撤销/拒绝 ASP.NET 核心中间件中的有效 Json Web 令牌以锁定用户

问题描述

我正在使用 JWT 中间件 + ASP.NET 身份在我的 ASP.NET Core WebAPI 项目中建立一个简单的用户/密码登录。

令牌有效期为 15 分钟。我想我将利用刷新令牌概念让用户保持登录状态,当他仍在浏览网站 (SPA) 或使用移动应用程序时(remember me选项怎么样?我会创建一个有效期为一个月的令牌? )

那么,有没有办法撤销生成的令牌?我正在考虑检查(在每个请求上)用户是否仍然有权访问 API。也许还有另一种方法来处理这些情况?

我看到了一个 AspNetUserTokens 表。也许有一种方法可以自动将 JWT 存储在那里?!目前我使用 ASP.NET Identity 仅用于用户身份验证。

标签: asp.netjwtasp.net-core-webapi

解决方案


可以参考这篇文章:http ://bitoftech.net/2014/07/16/enable-oauth-refresh-tokens-angularjs-app-using-asp-net-web-api-2-owin/

一旦用户获得长期访问令牌,只要他的访问令牌未过期,他就可以访问服务器资源,除非授权服务器实现强制您存储生成的自定义逻辑,否则没有标准方法可以撤销访问令牌访问数据库中的令牌并对每个请求进行数据库检查。但是使用刷新令牌,系统管理员可以通过简单地从数据库中删除刷新令牌标识符来撤销访问,因此一旦系统使用已删除的刷新令牌请求新的访问令牌,授权服务器将拒绝此请求,因为刷新令牌不再可用(我们将详细介绍这一点)。

简单的方法是颁发短期访问令牌,如果要撤销用户,请如文章所示撤销刷新令牌,在客户端清除刷新令牌和访问令牌。当然,访问令牌在过期之前仍然有效。

另一种方法是使用 Identity Server 4 Reference Tokens :

http://docs.identityserver.io/en/release/topics/reference_tokens.html

IdentityServer 会将令牌的内容存储在数据存储中,并且只会将此令牌的唯一标识符发回给客户端。然后,接收此引用的 API 必须打开与 IdentityServer 的反向通道通信以验证令牌


推荐阅读