我仍然无法理解JWT
的主要目的是什么。至于我,唯一的目的是:
CSRF
此外还有一项声称,JWT
您不必担心服务器端的会话存储问题。这对我来说并不清楚。 JWT
如何完全取代服务器端的会话存储?这是否意味着我们将所有会话数据放入JWT
,加密并在每次响应时将其发送给客户端?但如果是这样,这是否意味着服务器发出的令牌会根据我们以前在会话中存储的数据而改变?而且我理解唯一阻止我们以这种方式使用cookie的方法(在服务器端没有会话存储)是cookie文件的大小限制 - 仅4kb
。
我们还需要使用SSL
来阻止会话劫持吗?
如果我的理解是对的,或者还有其他一些方面,请告诉我。
答案 0 :(得分:4)
我认为关于JWT的传说太多了。要理解其本质,我们应该回到原来的定义。
根据其official网站:
JSON Web Token(JWT)是一个定义 a的开放标准(RFC 7519) 紧凑且独立的方式,可安全传输信息 派对之间作为JSON对象。此信息可以验证并且 值得信赖,因为它是经过数字签名的。
基本上,JWT提供的只是a way to transmit data
。不多也不少。因为涉及多方,所以格式必须标准化。一旦格式标准化,就可以制作图书馆以促进其采用。
再次来自official网站:
什么时候应该使用JSON Web令牌?
在某些情况下,JSON Web令牌很有用:
<强>认证强>
这是使用JWT的典型场景,一旦用户登录,每个后续请求都将包含JWT, 允许用户访问的路由,服务和资源 允许使用该令牌。单点登录是一项广泛的功能 现在使用JWT,因为它的开销很小,而且能力很强 容易在不同领域的系统中使用。
信息交流:
JSON Web令牌是在各方之间安全传输信息的好方法,因为它们可以 签名,例如使用公钥/私钥对,你可以肯定 发件人是他们所说的人。另外,作为 签名是使用标头和有效负载计算的,您也可以 确认内容未发生变化。
因此,身份验证仅 JWT的可能用例之一。虽然它确实是JWT的典型用法。
就身份验证而言,JWT可用于替换会话+ cookie方法,因为它可以节省服务器的内存以存储会话。 但好处有多大取决于用户数量和您的具体情况。如果只有少数客户并且没有跨域身份验证要求,我认为您不需要放弃旧的会话+ Cookie方法。
最后但并非最不重要,会话不仅仅用于身份验证。实际上是to place HTTP requests and responses within a larger context。鉴于JWT的大小限制,我不确定JWT是否可以为此目的替换会话。恕我直言,身份验证恰好是会话的一个使用案例,因为此类信息必须是特定于用户的。还有许多其他好的方案来证明会话的合理性,例如购物车。
答案 1 :(得分:3)
JWT本身就是自包含的令牌,并且不提供CSRF保护。用于交付JWT的协议可能(或应该)提供防止CSRF的方法。
JWT显然更好的一个领域&#34;而cookie则是他们的跨域功能。您可以在此处阅读有关令牌和Cookie之间比较的更多信息:https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/
JWT可以是自包含的,因此它们可以在可验证的容器中获得所需的所有信息,使您可以在不存储它们的情况下使用它们(或对它们的引用)。但是在会话中可能需要更多数据,因此一般来说避免会话存储本身并不是转移到JWT的原因。
SSL必须确保防止令牌泄漏和会话劫持。