使用JWT的正确方法是什么?

使用JWT的正确方法是什么?,jwt,session-cookies,xss,csrf,access-token,Jwt,Session Cookies,Xss,Csrf,Access Token,历史 会话Cookie Age:据我所知,JWT用于减少DB请求。会话通常存储在数据库中,所有请求都需要查询以验证请求。在小型网站和web应用程序中,这不是问题,但在大型应用程序中,性能非常重要 JWT-Rise:使用JWT,您可以跳过这一步(查询数据库以进行身份验证),并可以使用与服务器签名的有效JWT。您应该在头中的所有请求中发送JWT令牌,但如果该令牌被盗,小偷可以永远使用它进行身份验证 为了保护这一点,您可以在JWT中添加过期时间,但在过期时间之前,小偷可以像用户一样使用它。现在您可以减

历史

会话Cookie Age:据我所知,JWT用于减少DB请求。会话通常存储在数据库中,所有请求都需要查询以验证请求。在小型网站和web应用程序中,这不是问题,但在大型应用程序中,性能非常重要

JWT-Rise:使用JWT,您可以跳过这一步(查询数据库以进行身份验证),并可以使用与服务器签名的有效JWT。您应该在头中的所有请求中发送JWT令牌,但如果该令牌被盗,小偷可以永远使用它进行身份验证

为了保护这一点,您可以在JWT中添加过期时间,但在过期时间之前,小偷可以像用户一样使用它。现在您可以减少过期时间(例如10分钟)以保护用户,但在过期令牌后,真正的用户应该使用用户和密码登录,这是一场噩梦

刷新令牌诞生了:现在我们可以将JWT与cookie概念混合在一起。刷新令牌存储在DB中,您可以通过登录和注销来控制它。在访问令牌(具有较短期限的JWT令牌)过期后,客户端向某个端点发送请求以刷新此端点服务器中的访问令牌。检查数据库并搜索刷新令牌。如果刷新白名单中的令牌(或不在黑名单中),服务器将生成新的访问令牌并返回给客户端。现在,您可以将访问令牌存储在内存中,并将刷新令牌存储在本地存储器或类似的东西中

XSS攻击:本地存储不安全,通过XSS攻击,黑客可以窃取您的本地存储

httpOnly cookies:您可以在httpOnly cookies中存储JWT令牌。来自服务器和客户端的httpOnly Cookie集无法从JS访问此内容

CSRF攻击:httpOnly Cookie的新问题是CSRF攻击。CSRF攻击来自会话cookie时代

我的方法

刷新令牌与cookie非常相似,现在我们一起使用cookie和JWT访问令牌是传统的JWT令牌,刷新令牌是传统会话的令牌。每隔10分钟(在我的示例中是JWT年龄),我们使用刷新令牌(或会话的令牌)登录,在它们之间我们使用访问令牌

如果用户每10分钟发送100个请求,则my DB身份验证请求减少100倍

现在我的问题


我了解如何使用JWT吗?

解释得很好,我想你很了解它

要补充说明,您可能需要旋转刷新令牌:在使用刷新令牌获取新的访问令牌后,返回新的刷新令牌并使旧令牌无效。这将阻止访问旧刷新令牌的人使用它