身份驗證cookies和Token


后端服務器有兩種基本的身份驗證:
1.是基於Cookie的身份驗證,使用服務器端的cookie來對每次請求的用戶進行身份驗證。
2. 較新的方法,基於令牌Token的認證,依賴於被發送到服務器上每個請求的簽署令牌。

token的優勢

1.跨域 / CORS: cookies並不能跨不同的域名:abc.com和xy.abc.com的cookies是不能共享的,索性這種一級二級域名是可以通過

   設置Cookie的SetDomain參數(例如:cookies.setDomain(".abc.com"))來共享cookies.但是abc.com和xy.com是不能相互獲取  cookies的.而基於令牌能夠使用 AJAX 調用服務器,在任何域名下你都可以使用HTTP header頭部來傳輸用戶信息。

2. 無態(代表服務器端可伸縮): 沒有必要將會話保存,令牌 token 自己是一個自我包容的實體,包含用戶各種信息,其他狀態信息可以保存在cookie或客戶端本地存儲器中

3.CDN: 能夠適用來自CDN任何應用部件(e.g. javascript, HTML, images, etc.), 你的服務器只是一個 API.

4.解耦: 你不必和一個特定的驗證格式Schema綁定,令牌token 能在任何地方產生,這樣的你的API可以在任何地方以同一種驗證方式調用驗證。

5.對移動Mobile友善: 當你在一個原生平台(iOS, Android, Windows 8, etc.)時, cookies依賴於一個安全API,並不是好主意,因為你得和一個cookie容器打交道,而基於令牌則簡單多。 

6.CSRF: 因為你不依賴cookies, 你就不需要跨請求保護,(e.g. it 有可能來自 <iframe> 請求一個POST,需要重用一個存在的驗證。).

6.性能:一個網絡往返(如發現在數據庫中的會話)可能會比計算的HMACSHA256驗證令牌耗費更多時間。

7.登錄頁面不是一個特殊情況,如果你如果您正在使用量角器來寫你的功能測試,你不需要來處理登錄的任何特殊情況。

8.基於標准: 你的API能接受一個標准的 JSON Web Token (JWT). 這個標准后面有多個庫包(.NET, Ruby, Java, Python, PHP),許多公司支持(e.g. Firebase, Google, Microsoft). ,比如Firebase允許他們的客戶使用任何身份驗證機制,只要你使用預先定義的屬性生成一個 JWT,並使用共享密鑰簽署,就能調用它們的API.

 

基於Token的驗證原理

基於Token的身份驗證是無狀態的,我們不將用戶信息存在服務器或Session中。

這種概念解決了在服務端存儲信息時的許多問題

  NoSession意味着你的程序可以根據需要去增減機器,而不用去擔心用戶是否登錄。

基於Token的身份驗證的過程如下:

1.用戶通過用戶名和密碼發送請求。

2.程序驗證。

3.程序返回一個簽名的token 給客戶端。

4.客戶端儲存token,並且每次用於每次發送請求。

5.服務端驗證token並返回數據。

 每一次請求都需要token。token應該在HTTP的頭部發送從而保證了Http請求無狀態。我們同樣通過設置服務器屬性Access-Control-Allow-Origin:* ,讓服務器能接受到來自所有域的請求。需要主要的是,在ACAO頭部標明(designating)*時,不得帶有像HTTP認證,客戶端SSL證書和cookies的證書。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM