我看过in many places token-based authentication
的好处之一在 cookie-based authentication
它是否更适合 CORS/跨域场景。
但为什么呢?
这里是 a CORS scenario :
An HTML page served from http://domain-a.com makes an
<img>
src request for http://domain-b.com/image.jpg.
即使我的机器上有一个 token ,仅仅 <img>
怎么可能?标签知道在哪里找到并发送它?
并根据here ,建议把JWT存储为cookie,那怎么能在CORS/跨域场景下存活呢?
添加 1
基于 token 的身份验证比 session cookie 身份验证更容易扩展。在此处查看相关主题:Stateless web application, an urban legend?
最佳答案
澄清一下:对您拥有的任何子域的请求也被视为跨源请求(例如,您从 www.example.com 向 api.example.com 发出请求)。
一个简单的<img>
对另一个源的 GET 请求实际上也是跨源请求,但是如果您仅使用 GET、HEAD、POST 请求,并且您的 Content-Type header 是以下之一,则浏览器不会使用预检 (OPTION) 请求:
- 应用程序/x-www-form-urlencoded
- 多部分/表单数据
- 文本/纯文本
因此很简单 <img>
对另一个来源的请求不会有问题(无论是子域还是完全另一个域),因为它不会通过预检,除非它需要凭据,因为当您添加 Authorization header 时,请求需要通过预检。
关于存储在 localstorage 和 cookie 中:Localstorage 具有单源策略,这意味着您无法访问您从子域存储的数据,即 example.com 无法访问 api.example.com 的 localstorage 中的数据。另一方面,使用 cookie,您可以定义哪些子域可以访问 cookie。因此,您可以访问存储在 cookie 中的 token ,并将其与您的请求一起发送到服务器。 Cookie 也不允许跨域访问数据。
希望这对您有所帮助。
关于authentication - 为什么在CORS/跨域场景下基于token的认证优于基于cookie的认证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34650198/