JsonWebToken 用户身份验证问题

Posted

技术标签:

【中文标题】JsonWebToken 用户身份验证问题【英文标题】:JsonWebToken User Authentication Issue 【发布时间】:2016-11-27 09:52:59 【问题描述】:

我有一个用于用户身份验证的应用程序,我遇到了这个问题,我有用户登录并将 JWT (JsonWebToken) 存储在 cookie 中。我在验证用户后存储了 cookie。接下来,我作为管理员,在他/她仍然登录时从数据库中删除该用户。由于用户仍然登录,用户在浏览器中具有有效的 JWT,所以它仍然认为它存在,因为我的方式验证用户是否通过 webtoken 登录。我一直在考虑如何解决这个问题,但我还没有想出任何办法。

我也在GitHub上发布了这个问题。

【问题讨论】:

【参考方案1】:

一种方法是通过将其过期时间戳设置为已经过去的日期来使 cookie 过期。

【讨论】:

我可以将 exp 时间戳设置为 1 天,但如果我在 1 小时内删除用户,用户将登录 23 小时而不存在。 我不知道具体怎么做,但是你在删除用户时修改了cookie的过期时间。【参考方案2】:

看看Invalidating JSON Web Tokens

当用户情况发生变化并且您无法从 localStorage/cookie 中删除时,有几种技术可以在 JWT 令牌到期之前使其失效:帐户已删除/阻止/暂停、密码已更改、权限已更改、用户由管理员注销:

    令牌黑名单:存储在注销和过期时间之间的令牌,标记过期并在每个请求中检查它。您需要服务器存储。您可以仅包含 ID 或使用发布时间字段。在用户上次更新之前发布的令牌将无效

    到期时间短并轮换它们。每隔几个请求发出一个新的。问题是在没有请求时保持用户登录(例如关闭浏览器)

其他常用技术:

如果帐户被新用户和密码登录所破坏,则允许更改用户唯一 ID 包括上次登录日期以删除旧令牌 若要在用户更改密码时使令牌失效,请使用密码哈希对令牌进行签名。如果密码更改,任何以前的令牌都会自动验证失败。将此机制扩展到其他感兴趣的领域以进行签名。缺点是它需要访问数据库

【讨论】:

以上是关于JsonWebToken 用户身份验证问题的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.3 中间件:创建用于身份验证的中间件

JWT跨域身份验证解决方案

Django Rest Framework(DRF) Json Web Token(JWT) 身份验证和登录过程

基于JWT的身份验证

使用 JSON Web Token (JWT) 进行身份验证和授权

在ASP.NET Core中轻松使用JwtBeare进行身份验证