這里暫時(shí)不討論oauth,想先好好理解好jwt
這里兩個(gè)概念: 校驗(yàn) 和 登錄保持 理解的不是很透
我目前是給了android和ios客戶端一個(gè)密鑰secret, 然后我服務(wù)端也是用的這個(gè)密鑰
然后對(duì)客戶端的諸如 時(shí)間戳,nonce等參數(shù)配合我給他們的這個(gè)密鑰 多個(gè)參數(shù)加密為一個(gè)參數(shù)sign
然后一起傳遞給服務(wù)端,然后服務(wù)端在對(duì)前幾個(gè)參數(shù)加上服務(wù)端的密碼加密一下,最后判斷是否等于客戶端傳來的最后那個(gè)參數(shù)sign
但是我現(xiàn)在認(rèn)為我所做的上述驗(yàn)證貌似只能證明這次請(qǐng)求的客戶端知道我服務(wù)端的秘鑰,也就是說這次請(qǐng)求是我服務(wù)端允許的
但是至于用戶有沒有登錄貌似還是不知道,所以我就讓客戶端給我加了一個(gè)參數(shù)token, 如果用戶請(qǐng)求登陸接口并成功登錄的話,我就把session存到redis一個(gè)月,然后把token=sessionid給返回,讓他存儲(chǔ)到客戶端,下次帶著來給我,如果我拿到的話并且在redis中能找到這個(gè)session就證明他是登錄的
另外看網(wǎng)上有人說這個(gè)屬于自定義jwt 是么?
我不知道我這么做和jwt的最大區(qū)別是什么
比如我這種方法是依賴于sessionid來判斷用戶的登錄狀態(tài) 服務(wù)端是存儲(chǔ)了session的
Jwt我看了一會(huì)兒資料,好像是給客戶端簽發(fā)token之后 ,服務(wù)端好像并沒有存這個(gè)token, 然后客戶端的參數(shù)到了以后,貌似也只是做了我自己那種方法的第一步(就是做了多個(gè)參數(shù)和密鑰加密后是否等于sign,) 但好像很多資料說這已經(jīng)能證明登錄了 要這樣的話 我的那種方法是不是又用session判斷是否登錄是多余的
https://jwt.io/
JWT 的特點(diǎn)之一就是無狀態(tài),沒有登錄這個(gè)概念。
本來所謂登錄也只是人類理解的一個(gè)概念,服務(wù)器可沒這個(gè)概念。什么叫登錄?有權(quán)限訪問(登錄后才可以訪問的內(nèi)容)而已。
jwt確實(shí)不用在服務(wù)端存token,因?yàn)閠oken中就帶有簽發(fā)者、使用者、簽名等信息,足以證明登錄且未被篡改。因?yàn)橐坏┐鄹模灻床豢沈?yàn)證了。至于sessionid,是不一樣的。session主要是在服務(wù)端存一些其它的數(shù)據(jù),這些數(shù)據(jù)可能是敏感的,不方便放在jwt中的。當(dāng)然session只是存儲(chǔ)的一種,你也可以存在redis中,甚至其他類型的存儲(chǔ)系統(tǒng)中。其實(shí)呢你也可以把cookie看作token(雖然這是不對(duì)的,但是這樣會(huì)更好理解),session只是其中的一個(gè)值,僅此而已。