這裡暫時不討論oauth,想先好好理解好jwt
這裡兩個概念: 校驗 和 登入保持 理解的不是很透
我目前是給了android和ios客戶端一個金鑰secret, 然後我服務端也是用的這個金鑰
接著對客戶端的諸如 時間戳,nonce等參數配合我給他們的這個金鑰 多個參數加密為一個參數sign
接著一起傳遞給服務端,然後服務端在對前幾個參數加上服務端的密碼加密一下,最後判斷是否等於客戶端傳來的最後那個參數sign
但是我現在認為我所做的上述驗證貌似只能證明這次請求的客戶端知道我服務端的秘鑰,也就是說這次請求是我服務端允許的
但是至於使用者有沒有登入貌似還是不知道,所以我就讓客戶端給我加了一個參數token, 如果使用者請求登陸介面並成功登入的話,我就把session存到redis一個月,然後把token= sessionid給返回,讓他儲存到客戶端,下次帶著來給我,如果我拿到的話並且在redis中能找到這個session就證明他是登入的
另外看網路上有人說這個屬於自訂jwt 是麼?
我不知道我這麼做和jwt的最大差別是什麼
像我這種方法是依賴sessionid來判斷使用者的登入狀態 服務端是儲存了session的
Jwt我看了一會兒資料,好像是給客戶端簽發token之後,服務端好像並沒有存這個token, 然後客戶端的參數到了以後,貌似也只是做了我自己那種方法的第一步(就是做了多個參數和金鑰加密後是否等於sign,) 但好像很多資料說這已經能證明登入了要這樣的話我的那種方法是不是又用session判斷是否登入是多餘的
世界只因有你2017-05-16 13:00:05
https://jwt.io/
JWT 的特色之一就是無狀態,沒有登入這個概念。
本來所謂登入也只是人類理解的概念,伺服器可沒這個概念。什麼叫登入?有權限存取(登入後才可以存取的內容)而已。
某草草2017-05-16 13:00:05
jwt確實不用在服務端存token,因為token中就帶有簽發者、用戶、簽名等信息,足以證明登錄且未被篡改。因為一旦被竄改,簽名就不可驗證了。至於sessionid,是不一樣的。 session主要是在服務端存一些其它的數據,這些數據可能是敏感的,不方便放在jwt中的。當然session只是儲存的一種,你也可以存在redis中,甚至其他類型的儲存系統中。其實呢你也可以把cookie看作token(雖然這是不對的,但是這樣會更好理解),session只是其中的一個值,僅此而已。