security - JWT、无状态身份验证和安全性

标签 security authentication jwt

我正在开发一个应用程序,可扩展性是一个大问题。过去我使用过基于 session 的身份验证,但这次决定使用无状态服务器,以便于水平扩展。

我不是安全专家,但在研究 JWT 时,我开始发现这些非常不安全。我们对密码进行哈希处理的全部原因是,如果我们的数据库遭到破坏,攻击者就无法冒充用户。使用 JWT,我们将 secret 存储在服务器上。如果攻击者获得了 secret 的访问权限,他们就不能冒充任何他们想要的用户吗?这是否意味着使用 JWT 具有与存储纯文本密码相同的安全级别?

我读到人们有时会使用 reddis 来交叉引用 JWT,但服务器不是无状态的,我根本看不到使用 JWT 的好处。

有人可以帮我澄清这个问题吗?

最佳答案

基于 session 的身份验证系统(至少是任何值得使用的系统)也会在服务器上存储 secret 。就像 JWT 一样,该 key 用于对存储在基于 session 的身份验证使用的 cookie 中的数据进行签名。所以这与 JWT 没有什么不同。

所有这些都与密码存储完全无关,因为只有当您没有 cookie/JWT 时才会使用密码。

编辑:

不知道如何将 Redis 与 JWT 结合使用...Redis 中存储了什么( token )?这似乎毫无意义,因为服务器需要知道的只是解码 token 的 secret 。

以下是使用 JWT 的一些好处:

  • 正如您已经提到的,它是无状态的
  • 它不会受到 CSRF/XSRF 攻击。这些攻击的原理是欺骗您的浏览器将 cookie 发送到未生成 cookie 的服务器。使用 JWT 时不会发生这种情况,因为浏览器不会像使用 cookie 那样自动发送 JWT。
  • JWT 是 standardized 。有一种明确定义的方法来生成它们,这意味着 JWT 更便携,并且该过程已经过安全社区的审查。

关于security - JWT、无状态身份验证和安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36238642/

相关文章:

c# - 我的代码已被 Norton 检测到病毒(Sonar)

.NET 插件安全

具有 net.tcp 绑定(bind)的 WCF 服务(托管在 IIS 7 上)无法在域用户下工作(对于应用程序池)

java - 如何从 Swing 应用程序获取 Windows 登录凭据?

node.js - 在每个请求中包含承载 token 并保持用户登录

security - 防止PDF文件下载和打印

asp.net-mvc - 为什么AuthorizeAttribute认证授权失败会重定向到登录页面?

database-design - 用户名是主键的有效候选者吗?

c# - 具有 jwt token 和身份的 asp core 2 中基于角色的授权

c# - System.Security.Claims.ClaimType 角色不匹配