JSON Web Token,一般用它來替換掉Session實現數據共享。
使用基于 Token 的身份驗證方法,在服務端不需要存儲用戶的登錄記錄。大概的流程是這樣的:
1、客戶端通過用戶名和密碼登錄服務器;
2、服務端對客戶端身份進行驗證;
3、服務端對該用戶生成Token,返回給客戶端;
4、客戶端將Token保存到本地瀏覽器,一般保存到cookie中;
5、客戶端發起請求,需要攜帶該Token;
6、服務端收到請求后,首先驗證Token,之后返回數據。
如上圖為Token實現方式,瀏覽器次訪問服務器,根據傳過來的唯一標識userId,服務端會通過一些算法,如常用的HMAC-SHA256算法,然后加一個密鑰,生成一個token,然后通過BASE64編碼一下之后將這個token發送給客戶端;客戶端將token保存起來,下次請求時,帶著token,服務器收到請求后,然后會用相同的算法和密鑰去驗證token,如果通過,執行業務操作,不通過,返回不通過信息。
可以對比下圖session實現方式,流程大致一致。
優點:
無狀態、可擴展 :在客戶端存儲的Token是無狀態的,并且能夠被擴展。基于這種無狀態和不存儲Session信息,負載均衡器能夠將用戶信息從一個服務傳到其他服務器上。
安全:請求中發送token而不再是發送cookie能夠防止CSRF(跨站請求偽造)。
可提供接口給第三方服務:使用token時,可以提供可選的權限給第三方應用程序。
多平臺跨域
對應用程序和服務進行擴展的時候,需要介入各種各種的設備和應用程序。 假如我們的后端api服務器a.com只提供數據,而靜態資源則存放在cdn 服務器b.com上。當我們從a.com請求b.com下面的資源時,由于觸發瀏覽器的同源策略限制而被阻止。
我們通過CORS(跨域資源共享)標準和token來解決資源共享和安全問題。
舉個例子,我們可以設置b.com的響應首部字段為: