2016-01-07 83 views
2

我看過in many placestoken-based authentication優於cookie-based authentication的好處之一是它是CORS /跨域情況的更好套件。爲什麼在CORS /跨域方案中基於令牌的認證優於基於cookie的認證?

但是爲什麼?

這裏是a CORS scenario

http://domain-a.com提供一個HTML頁面做了http://domain-b.com/image.jpg<img> SRC 請求。

即使我的機器上有令牌,單憑<img>標籤知道在哪裏可以找到併發送它?

並根據here,建議將JWT存儲爲cookie,那麼如何在CORS /跨域情況下倖存?

加1

基於令牌的認證是很容易,會話cookie的一個向外擴展。請參閱相關主題:Stateless web application, an urban legend?

回答

2

只是爲了說明:對您擁有的任何子域的請求也被視爲跨源請求(例如,您從www.example.com向api.example.com發送請求)。

簡單<img>對另一個源的GET請求確實也是跨源請求,但是如果僅使用GET,HEAD和POST請求,並且您的Content-Type頭是瀏覽器,則瀏覽器不使用預檢(OPTION)請求以下之一:

  • 應用程序/ x-WWW窗體-urlencoded
  • 的multipart/form-data的
  • 純文本/

因此簡單<img>對另一個來源的請求不會有問題(不管是子域還是另一個域),因爲它不會通過預檢,除非它需要憑據,因爲當您添加授權標頭時,請求需要經過預檢。

有關的localStorage存儲VS中的cookie:localStorage的具有單一產地的政策,這意味着你無法訪問已存儲的子域,即example.com在api.example.com的localStorage的無法訪問數據的數據。另一方面,使用Cookie,您可以定義哪些子域可以訪問cookie。因此,您可以訪問存儲在Cookie中的令牌並將其發送到服務器並提出請求。 Cookie也不允許跨不同域訪問數據。

希望這會有所幫助。