工作3年,還不懂單點(diǎn)登錄系統(tǒng)?看看這8幅漫畫~
互聯(lián)網(wǎng)架構(gòu)師后臺(tái)回復(fù) 2T 有特別禮包
來源:blog.leapoahead.com/2015/09/07/user-authentication-with-jwt/
上一篇:熱文:if(a==1且a==2且a==3),有沒有可能為true?
我嘗試用八幅漫畫先讓大家理解如何設(shè)計(jì)正常的用戶認(rèn)證系統(tǒng),然后再延伸到單點(diǎn)登錄系統(tǒng)。
JWT 簡(jiǎn)介
JSON Web Token(JWT)是一個(gè)非常輕巧的規(guī)范。這個(gè)規(guī)范允許我們使用JWT在用戶和服務(wù)器之間傳遞安全可靠的信息。
https://your.awesome-app.com/make-friend/?from_user=B&target_user=AJWT 的組成
一個(gè)JWT實(shí)際上就是一個(gè)字符串,它由三部分組成:頭部、載荷與簽名。
載荷(Payload)
{"iss": "John Wu JWT","iat": 1441593502,"exp": 1441594722,"aud": "www.example.com","sub": "[email protected]","from_user": "B","target_user": "A"}
iss: 該JWT的簽發(fā)者 sub: 該JWT所面向的用戶 aud: 接收該JWT的一方 exp(expires): 什么時(shí)候過期,這里是一個(gè)Unix時(shí)間戳 iat(issued at): 在什么時(shí)候簽發(fā)的
這些定義都可以在標(biāo)準(zhǔn)中找到。
將上面的JSON對(duì)象進(jìn)行[base64編碼]可以得到下面的字符串。這個(gè)字符串我們將它稱作JWT的Payload(載荷)。
eyJpc3MiOiJKb2huIFd1IEpXVCIsImlhdCI6MTQ0MTU5MzUwMiwiZXhwIjoxNDQxNTk0NzIyLCJhdWQiOiJ3d3cuZXhhbXBsZS5jb20iLCJzdWIiOiJqcm9ja2V0QGV4YW1wbGUuY29tIiwiZnJvbV91c2VyIjoiQiIsInRhcmdldF91c2VyIjoiQSJ9
var base64url = require('base64url')var header = { "from_user": "B", "target_user": "A"}console.log(base64url(JSON.stringify(header)))// 輸出:eyJpc3MiOiJKb2huIFd1IEpXVCIsImlhdCI6MTQ0MTU5MzUwMiwiZXhwIjoxNDQxNTk0NzIyLCJhdWQiOiJ3d3cuZXhhbXBsZS5jb20iLCJzdWIiOiJqcm9ja2V0QGV4YW1wbGUuY29tIiwiZnJvbV91c2VyIjoiQiIsInRhcmdldF91c2VyIjoiQSJ9頭部(Header)
{ "typ": "JWT", "alg": "HS256"}在這里,我們說明了這是一個(gè)JWT,并且我們所用的簽名算法(后面會(huì)提到)是HS256算法。
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
簽名(簽名)
將上面的兩個(gè)編碼后的字符串都用句號(hào).連接在一起(頭部在前),就形成了
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcm9tX3VzZXIiOiJCIiwidGFyZ2V0X3VzZXIiOiJBIn0rSWamyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKViM
最后將這一部分簽名也拼接在被簽名的字符串后面,我們就得到了完整的JWT
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcm9tX3VzZXIiOiJCIiwidGFyZ2V0X3VzZXIiOiJBIn0.rSWamyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKViMhttps://your.awesome-app.com/make-friend/?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcm9tX3VzZXIiOiJCIiwidGFyZ2V0X3VzZXIiOiJBIn0.rSWamyAYwuHCo7IFAgd1oRpSP7nzL7BF5t7ItqpKViM用戶認(rèn)證八步走






單點(diǎn)登錄
www.taobao.comnv.taobao.comnz.taobao.comlogin.taobao.com
所以如果要實(shí)現(xiàn)在login.taobao.com登錄后,在其他的子域名下依然可以取到Session,這要求我們?cè)诙嗯_(tái)服務(wù)器上同步Session。
Set-Cookie: jwt=lll.zzz.xxx; HttpOnly; max-age=980000; domain=.taobao.com
注意domain必須設(shè)置為一個(gè)點(diǎn)加頂級(jí)域名,即.taobao.com。這樣,taobao.com和*.taobao.com就都可以接受到這個(gè)Cookie,并獲取JWT了。
感謝您的閱讀,也歡迎您發(fā)表關(guān)于這篇文章的任何建議,關(guān)注我,技術(shù)不迷茫!小編到你上高速。
正文結(jié)束
1.不認(rèn)命,從10年流水線工人,到谷歌上班的程序媛,一位湖南妹子的勵(lì)志故事
2.深圳一普通中學(xué)老師工資單曝光,秒殺程序員,網(wǎng)友:敢問是哪個(gè)學(xué)校畢業(yè)的?
3.從零開始搭建創(chuàng)業(yè)公司后臺(tái)技術(shù)棧
5.清華大學(xué):2021 元宇宙研究報(bào)告!
6.為什么國(guó)內(nèi) 996 干不過國(guó)外的 955呢?

