为什么基于令牌的身份验证优于CORS /跨域方案中基于cookie的身份验证?

时间:2016-01-07 08:14:55

标签: authentication cookies cors token jwt

我看到in many places add优于token-based authentication的好处之一是它更适合CORS /跨域方案。

但为什么?

以下是a CORS scenario

  

http://domain-a.com提供的HTML页面生成cookie-based authentication src   请求http://domain-b.com/image.jpg

即使我的机器上有令牌,仅仅<img>标签如何知道在哪里找到并发送它?

根据here,建议将JWT存储为cookie,那么如何才能在CORS /跨域场景中存活?

添加1

基于令牌的身份验证比会话cookie更容易扩展。请在此处查看相关主题:Stateless web application, an urban legend?

1 个答案:

答案 0 :(得分:2)

只是为了澄清:对您拥有的任何子域的请求也被视为跨源请求(例如,您从www.example.com向api.example.com发出请求)。

对另一个来源的简单<img> GET请求确实也是跨源请求,但如果您仅使用GET,HEAD,POST请求和您的内容,则浏览器不使用预检(OPTION)请求类型标题是以下之一:

  • 应用程序/ x-WWW窗体-urlencoded
  • 的multipart / form-data的
  • 文本/纯

因此,对其他来源的简单<img>请求不会有问题(无论是子域还是完全是另一个域),因为它不会通过预检,除非它需要凭据,因为当您添加Authorization标头时,请求需要通过预检。

关于在localstorage中存储vs在cookie中:Localstorage具有单一来源策略,这意味着您无法访问从子域存储的数据,即example.com无法访问api.example.com的localstorage中的数据。另一方面,使用cookie,您可以定义哪些子域可以访问cookie。因此,您可以访问存储在cookie中的令牌,并根据您的请求将其发送到服务器。 Cookie也不允许跨不同域访问数据。

希望这有帮助。