首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于JSON令牌(JWT)的安全性和可靠性问题

关于JSON令牌(JWT)的安全性和可靠性问题
EN

Stack Overflow用户
提问于 2016-08-14 09:01:22
回答 1查看 519关注 0票数 1

我正在为个人项目创建一个API和一个SPA,并在以下验证用户的解决方案之间犹豫不决(注意:通过HTTPS):

  1. HTTP基本身份验证(发送每个请求的用户名/密码)
  2. 基于令牌的身份验证(在数据库中存储SHA1 1-ed用户令牌)
  3. JSON Web令牌(JWT)身份验证

我甚至不认为OAuth,因为这似乎是一个真正的痛苦,而且我不需要认证其他应用程序,我只关心认证用户。

据我所读,JWT似乎是一个日益增长的标准。它基本上保存调用方的数据,所以每次调用者发出API请求时,您都会使用encrypt(base64(header) + "." + base64(payload))secret进行比较,并将其与令牌本身最后部分中提供的签名进行比较。它避免了执行DB事务。

问题是,如果我使用JWT 1),我没有可能手动撤销特定的令牌,最重要的是,如果我更改用户的权限,最重要的是,如果更改用户的权限,以前授予的JWT将仍然拥有旧的数据,而旧的权限可以授予/限制他对某些数据的持续访问,只要他没有获得新的权限,这确实是有问题的,而且我很惊讶我还没有看到有人提到这个问题。此外,3) JWT声称允许服务器在不访问DB的情况下验证访问,但我无法想象任何不涉及数据库的请求,如果只是返回用户请求的数据的话。所以这个论点对我来说没有任何意义。

对我来说,我现在最好的选择是选项2。网站将有限制和小流量,所以在数据库中存储令牌似乎是一个小而有价值的权衡,允许我用这些令牌做任何我想做的事情,包括管理它们的生命周期和权限。它还避免像选项1那样公开用户的凭据,以防他们在其他在线服务中使用相同的凭据。

我只想知道我对JWT的担忧是正确的,还是我误解了它的功能?而且,即使我已经读过很多关于这些不同选项的文章,也可以自由地链接任何能照亮我的东西,帮助我做出更好的选择。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-08-16 06:50:33

您是对的,在过期之前使令牌无效是一个常见的JWT问题。有几个原因需要考虑:帐户删除/阻止/暂停、密码更改、权限更改、管理员注销用户。

使用JWT,您还可以设置一个令牌黑名单来存储在注销和过期时间之间的令牌,标记过期并在每个请求中检查它。您可以只包含ID (JWT的jti声明),或者使用最后的登录日期和iat声明(在

当用户更改密码/权限时,其他使令牌无效的技术是使用这些字段的散列对令牌进行签名。如果字段值发生变化,任何以前的标记都会自动失败验证。

请参阅https://stackoverflow.com/a/37520125/6371459

最后,请注意令牌是用服务器私钥(未加密)签名的。

代码语言:javascript
复制
sign(base64(header) + "." + base64(payload))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38940671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档