asp.net - 撤销/拒绝 ASP.NET 核心中间件中的有效 Json Web 令牌以锁定用户
问题描述
我正在使用 JWT 中间件 + ASP.NET 身份在我的 ASP.NET Core WebAPI 项目中建立一个简单的用户/密码登录。
令牌有效期为 15 分钟。我想我将利用刷新令牌概念让用户保持登录状态,当他仍在浏览网站 (SPA) 或使用移动应用程序时(remember me
选项怎么样?我会创建一个有效期为一个月的令牌? )
那么,有没有办法撤销生成的令牌?我正在考虑检查(在每个请求上)用户是否仍然有权访问 API。也许还有另一种方法来处理这些情况?
我看到了一个 AspNetUserTokens 表。也许有一种方法可以自动将 JWT 存储在那里?!目前我使用 ASP.NET Identity 仅用于用户身份验证。
解决方案
一旦用户获得长期访问令牌,只要他的访问令牌未过期,他就可以访问服务器资源,除非授权服务器实现强制您存储生成的自定义逻辑,否则没有标准方法可以撤销访问令牌访问数据库中的令牌并对每个请求进行数据库检查。但是使用刷新令牌,系统管理员可以通过简单地从数据库中删除刷新令牌标识符来撤销访问,因此一旦系统使用已删除的刷新令牌请求新的访问令牌,授权服务器将拒绝此请求,因为刷新令牌不再可用(我们将详细介绍这一点)。
简单的方法是颁发短期访问令牌,如果要撤销用户,请如文章所示撤销刷新令牌,在客户端清除刷新令牌和访问令牌。当然,访问令牌在过期之前仍然有效。
另一种方法是使用 Identity Server 4 Reference Tokens :
http://docs.identityserver.io/en/release/topics/reference_tokens.html
IdentityServer 会将令牌的内容存储在数据存储中,并且只会将此令牌的唯一标识符发回给客户端。然后,接收此引用的 API 必须打开与 IdentityServer 的反向通道通信以验证令牌
推荐阅读
- reflection - 在 kotlin 中使用反射更改访问修饰符
- java - 从 SOAP 消息中获取 dataHandler
- java - 在一个黄瓜步骤实现中具有某些值的变量集在下一步中将失去其值
- android - 另一个“无法加载未知的 AppCompat ActionBar”错误问题
- node.js - 在 mongoDB 上添加带有迁移的字段
- python - 替换 dataframe.iterrows()
- sql - 如何在oracle上比较日期以格式化日期
- emscripten - 是否可以编译 javascript 引擎(如 spidermonkey)并在 Webassembly 上运行?
- angular - Angular 6中ngFor中的Textarea输入问题
- swift - Xcode 生成的 CoreData 文件无法被 Copy Bundle Resources 构建阶段处理