JWT:为什么访问和刷新令牌
JWT: Why Access & Refresh Token
我正在 Node.js & Mongoose 中制作一个需要某种身份验证方式的应用程序。我首先想到的是简单会话,但后来遇到了 JWT。我阅读了很多文章,但仍然不确定是否应该使用它们。我的问题是:
- 假设有人窃取了一个在 15 分钟后过期的短期访问令牌,刷新令牌不会毫无用处,因为 15 分钟是做某事的很多时间吗?
- 我应该在哪里以及如何存储刷新和访问令牌?我想访问客户端内存并刷新数据库中的令牌?但是,如果攻击者入侵了数据库并获得了刷新令牌怎么办?那他有权限吗?
- 是否还有其他安全且好的方法来使用 Node.js 进行身份验证?
提前致谢!
短寿命令牌比 non-expiring 或更长寿命令牌好得多,所以绝对不要长寿命。 token loss/theft 是一个需要双重解决方案来将客户端锁定到服务器的问题(考虑到 ip 欺骗,ip 锁定是一个坏主意)真正的解决方案取决于你想要通过第三方服务建立信任的深度两者之间。注销总是可能的,这取决于服务器何时停止识别其发出的令牌,并且客户端应用程序可以对逻辑和服务器拒绝进行编码。
将令牌存储到持久存储不是黑客证明,除非在存储之前在服务器端应用程序层中进行某种转换,如解密或解包(这样令牌就不像在客户端上那样存储在数据库中的一面。)。
JWT RFC https://datatracker.ietf.org/doc/html/rfc7519 中的答案很少,因此对于大多数应用程序来说,使用它是相当安全的。请记住,安全性始终要求在每个步骤中进行双重检查和两个因素,但总有一个适用的判断调用。
我正在 Node.js & Mongoose 中制作一个需要某种身份验证方式的应用程序。我首先想到的是简单会话,但后来遇到了 JWT。我阅读了很多文章,但仍然不确定是否应该使用它们。我的问题是:
- 假设有人窃取了一个在 15 分钟后过期的短期访问令牌,刷新令牌不会毫无用处,因为 15 分钟是做某事的很多时间吗?
- 我应该在哪里以及如何存储刷新和访问令牌?我想访问客户端内存并刷新数据库中的令牌?但是,如果攻击者入侵了数据库并获得了刷新令牌怎么办?那他有权限吗?
- 是否还有其他安全且好的方法来使用 Node.js 进行身份验证?
提前致谢!
短寿命令牌比 non-expiring 或更长寿命令牌好得多,所以绝对不要长寿命。 token loss/theft 是一个需要双重解决方案来将客户端锁定到服务器的问题(考虑到 ip 欺骗,ip 锁定是一个坏主意)真正的解决方案取决于你想要通过第三方服务建立信任的深度两者之间。注销总是可能的,这取决于服务器何时停止识别其发出的令牌,并且客户端应用程序可以对逻辑和服务器拒绝进行编码。
将令牌存储到持久存储不是黑客证明,除非在存储之前在服务器端应用程序层中进行某种转换,如解密或解包(这样令牌就不像在客户端上那样存储在数据库中的一面。)。
JWT RFC https://datatracker.ietf.org/doc/html/rfc7519 中的答案很少,因此对于大多数应用程序来说,使用它是相当安全的。请记住,安全性始终要求在每个步骤中进行双重检查和两个因素,但总有一个适用的判断调用。