我看到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?
答案 0 :(得分:2)
只是为了澄清:对您拥有的任何子域的请求也被视为跨源请求(例如,您从www.example.com向api.example.com发出请求)。
对另一个来源的简单<img>
GET请求确实也是跨源请求,但如果您仅使用GET,HEAD,POST请求和您的内容,则浏览器不使用预检(OPTION)请求类型标题是以下之一:
因此,对其他来源的简单<img>
请求不会有问题(无论是子域还是完全是另一个域),因为它不会通过预检,除非它需要凭据,因为当您添加Authorization标头时,请求需要通过预检。
关于在localstorage中存储vs在cookie中:Localstorage具有单一来源策略,这意味着您无法访问从子域存储的数据,即example.com无法访问api.example.com的localstorage中的数据。另一方面,使用cookie,您可以定义哪些子域可以访问cookie。因此,您可以访问存储在cookie中的令牌,并根据您的请求将其发送到服务器。 Cookie也不允许跨不同域访问数据。
希望这有帮助。