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