最近一直在學習web api authentication,以Jwt為例,可以這樣理解,token是身份證,用戶名和密碼是戶口本,身份證是有有效期的(jwt 有過期時間),且攜帶方便(自己帶有所有信息 self contained),戶口本不會過期(用戶名和密碼什么時候都有用),攜帶不方便(用戶名和密碼從數據庫驗證),jwt同樣也有身份證的缺點,丟了別人有些地方可以用,戶口本改名字了,身份證還可以用(同樣,用戶名和密碼修改后jwt不修改)。針對身份證的缺點,可以設置較短過期時間,另外token auth做了改進,加入了refresh token的概念。token驗證這次就不再介紹了,這個東西網上比較多,token可以自己定義,也可以使用一些標准的token如Json web token。下面主要介紹refresh token。
使用refresh token的目的是處理access token 時間過期問題,如果每次都申請access token,太麻煩了,就加入refresh token的概念,如果access token過期可以使用refresh token更新access token,而且refresh token也改變了,這點很重要。另外access token的內容也改變了,解決了戶口本改名字,身份證名字沒改的問題。refresh token每次改變這個很重要,意味着每次refresh后原來的token不能用了。另外一個優點就不用說了,就是不用在客戶端存儲用戶名和密碼。
理解refresh token首先要理解client,什么是client,或者說client 的唯一clientID怎么獲取,調用web api的client可以是web ,mobile和其他客戶端。web應用調用web api 使用js調用,這個有點蛋疼,其他的服務端知道的client都可以自己寫代碼生成唯一的clientID,我們可以加密傳遞的東西,而js調用api沒法加密。因此client可以分為兩類js調用的和其他的客戶端調用。
看ti6 dota2決賽了,下次弄個例子。。。。