我正在使用JWT中间件+ ASP.NET身份在我的ASP.NET Core WebAPI项目中建立简单的用户/密码登录。
令牌的有效期为15分钟。我想当用户仍在浏览网站(SPA)或使用移动应用程序时,我将利用“刷新令牌”概念来保持登录状态(remember me
选项呢?我会创建一个有效的令牌也许一个月?)
那么,有什么办法可以撤销生成的令牌?我考虑考虑(根据每个请求)用户是否仍然有权访问API。也许还有另一种方法来处理这些情况?
我看到一个AspNetUserTokens表。也许有一种方法可以自动在其中存储JWT?目前,我仅使用ASP.NET Identity进行用户身份验证。
答案 0 :(得分:1)
一旦用户获得了长期的访问令牌,只要他的访问令牌没有过期,他就可以访问服务器资源,除非授权服务器实现强制您执行的自定义逻辑,否则就没有标准的方法来撤消访问令牌。将生成的访问令牌存储在数据库中,并对每个请求进行数据库检查。但是使用刷新令牌,系统管理员可以通过简单地从数据库中删除刷新令牌标识符来撤消访问,因此一旦系统使用删除的刷新令牌请求新的访问令牌,授权服务器将拒绝此请求,因为刷新令牌不再可用(我们将对此进行详细介绍)。
最简单的方法是发出短暂的访问令牌,如果要撤消用户,请按文章所示撤消刷新令牌,然后在客户端清除刷新令牌和访问令牌。当然,访问令牌在过期之前仍处于活动状态。
另一种方法是使用Identity Server 4参考令牌:
http://docs.identityserver.io/en/release/topics/reference_tokens.html
IdentityServer将令牌的内容存储在数据存储中,并且只会将此令牌的唯一标识符发回客户端。然后,收到此引用的API必须打开与IdentityServer的反向通道通信,以验证令牌