JSON Web Token (JWT) advantages/disadvantages over Cookies
JWT相对于cookie的一个优势似乎是它绕过了cookie的原产地限制。
有人可以帮助我了解JWT的其他优点,以及重要的其他缺点吗?
许多与Web相关的信息可以在以下类似文章中找到:令牌身份验证与Cookie;我想指出一些"建筑"上的差异:
JWT是一种标准化的容器格式,可以使用"声明"以安全的方式对用户和客户端的相关信息进行编码(而cookie内容和签名/加密未标准化)
JWT不限于提供有关已认证用户本身的类似会话的信息;它们还可以用于将访问权限委派给代表用户的客户端
JWT比cookie允许更精细的访问模型,因为JWT可以在"范围"(它们允许客户端执行的操作)以及时间方面受到限制
- 来自新标签的GET请求呢?如果您在通过浏览器访问的Web应用程序上使用JWT,则可以假定用户可能想要打开其他选项卡(并可能手动输入所需的URL)。在这种情况下,您将无法在发出请求之前读取存储的JWT(例如,将其注入标头中)。 Cookies不会出现此问题,因为它们是由浏览器以新请求(甚至是在新标签页上)本地发送的。我对此问题提出了疑问:stackoverflow.com/questions/30061307/
-
前提是在访问URL时未提供正确的JWT,浏览器将被重定向到特定的端点(授权服务器),在该端点可以获取JWT
-
[新JWT的生成是否会使原始选项卡上存在的JWT无效?如果是这样,则不能在不中断原始标签页操作的情况下执行此操作]因此,循环似乎是:您已经通过身份验证,新标签页将导致重定向,我想您的应用程序具有本地JS代码只是为了获得您的$ window.localStorage.token(sessionStorage在选项卡之间不起作用)–这是必需的:您要避免用户重新登录并可能避免JWT破坏–然后通过注入JWT重定向回所需的资源。
-
回复:使用cookie,在Stormpath stormpath.com/blog/上有一篇有趣的文章,其中JWT在cookie上传输。这很好,因为服务器仍可以使用cookie JWT进行身份验证而无需检查数据库,这是使用JWT的主要原因之一。
-
@noderman我会亲自在客户端处理此问题。任何GET请求实际上都会检索我的Web应用程序-可能是SPA-然后该SPA将使用存储在localStorage中的令牌发出任何必要的AJAX请求。尽管您提出的问题是合理的,但我认为它很容易解决。
-
@nodeman我不确定使用cookie来存储令牌是否是一个好主意。为什么不以传统方式简单地使用cookie。 JWT的整体思想是为提供更安全的方式。如果将它们存储在cookie中,那么您就可以使用CSRF,因为您的凭据将随任何请求自动发送。看看github对话dwyl / learn-json-web-tokens。用户joepie91指出了与该方法有关的一些严重的安全问题。
就我而言,JWT只是一个令牌,用于表示客户端无法伪造的数据。您可以通过http标头或cookie将其传递到服务器。您只需要在服务器端实现两种方法即可访问JWT,然后再对其进行处理。 Cookie对于Web浏览器是实用的,但对于普通的HTTP请求(例如使用curl或本机应用程序),使用标头更容易。 JWT与协议无关,您也可以在Web套接字中使用它,将其放在json有效负载中或其他任何位置,只要可以在接收端对其进行访问和解码即可。