Python使用JWT的超詳細(xì)教程
一、JWT的介紹
JWT(JSON Web Tokens)是一種用于在網(wǎng)絡(luò)應(yīng)用環(huán)境間安全地傳輸信息的簡(jiǎn)潔的、URL安全的令牌標(biāo)準(zhǔn)。JWT的聲明一般被用來(lái)在身份提供者和服務(wù)提供者間傳遞被認(rèn)證的用戶身份信息,以便于從資源服務(wù)器獲取資源,也可以增加一些額外的其它業(yè)務(wù)邏輯所必須的聲明信息,該token也可直接被用于認(rèn)證,也可被加密。
二、JWT的組成
JWT的結(jié)構(gòu)分為三部分,它是用點(diǎn)來(lái)分割的,Header(頭部),Payload(負(fù)載),Signature(簽名)。如下圖
1、Header(頭部)
頭部通常包含了兩部分信息:聲明類型和使用什么算法,第一部分就是將json轉(zhuǎn)化為字符串,然后用Base64加密,如下格式
{ "alg":"HS256", "type":"jwt" }
2、Payload(負(fù)載)
負(fù)載里面通常就是我們要傳遞給前端的值,如用戶的一些信息啊,也是將json轉(zhuǎn)換為字符串,然后用Base64加密,如下格式
{ "id":"123", "username":"xiaoming" }
3、Signature(簽名)
簽名的作用是保證JWT的未被篡改。簽名的生成方式是將編碼后的頭部、編碼后的負(fù)載、秘密通過(guò)指定的算法進(jìn)行簽名。簽名的作用是保證JWT的發(fā)送者不能抵賴自己發(fā)送的消息,接收者能夠驗(yàn)證消息的完整性。這里是將前2部分的密文拼接起來(lái),對(duì)這2部分進(jìn)行HS256加密,然后加鹽,最后在對(duì)加密后的內(nèi)容用Base64加密一次
三、Python寫(xiě)JWT
1、安裝Jwt
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple PyJWT
2、使用JWT
import datetime import jwt def create_jwt(): headers = { 'alg': 'HS256', 'typ': 'JWT' } # jwt的頭部,包含了類型和算法的指定 payload = { "id": 123, "username": '小明', 'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=12), } # jwt的負(fù)載,都是一些自定義值,其中exp中的內(nèi)容是我們指定jwt的一個(gè)有效時(shí)間,有效時(shí)間為12個(gè)小時(shí) token = jwt.encode(headers=headers, payload=payload, algorithm='HS256', key='123') # 對(duì)上面內(nèi)容進(jìn)行加密,這里的key就是加的鹽 print(token) if __name__ == '__main__': create_jwt()
3、解密JWT
import datetime import jwt def create_jwt(): headers = { 'alg': 'HS256', 'typ': 'JWT' } # jwt的頭部,包含了類型和算法的指定 payload = { "id": 123, "username": '小明', 'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=12), } # jwt的負(fù)載,都是一些自定義值,其中exp中的內(nèi)容是我們指定jwt的一個(gè)有效時(shí)間,有效時(shí)間為12個(gè)小時(shí) token = jwt.encode(headers=headers, payload=payload, algorithm='HS256', key='123') # 對(duì)上面內(nèi)容進(jìn)行加密,這里的key就是加的鹽,是自定義的,我們?cè)谑褂名}的時(shí)候一般是唯一的一個(gè)值 print(token) return token def decode_JWT(token): content = jwt.decode(jwt=token, key='123', algorithms=['HS256']) # 對(duì)jwt進(jìn)行解密,這里用的key必須和上面用的key一樣,否則是無(wú)法解密出來(lái)的 print(content) if __name__ == '__main__': token = create_jwt() decode_JWT(token)
解密出來(lái)的結(jié)果如下圖
總結(jié)
到此這篇關(guān)于Python使用JWT的文章就介紹到這了,更多相關(guān)Python使用JWT內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python中JWT用戶認(rèn)證的實(shí)現(xiàn)
- Python 基于jwt實(shí)現(xiàn)認(rèn)證機(jī)制流程解析
- Python 身份驗(yàn)證和授權(quán)庫(kù)使用詳解(python jwt庫(kù))
- python-jwt用戶認(rèn)證食用教學(xué)的實(shí)現(xiàn)方法
- Python JWT 介紹和使用詳解
- Python JWT認(rèn)證與pyjwt包詳細(xì)介紹
- Python?PyJWT庫(kù)簡(jiǎn)化JSON?Web?Token的生成與驗(yàn)證
- Python結(jié)合jwt實(shí)現(xiàn)登錄權(quán)限校驗(yàn)認(rèn)證
- Python實(shí)現(xiàn)JWT加解密的示例代碼
相關(guān)文章
淺談python中的getattr函數(shù) hasattr函數(shù)
下面小編就為大家?guī)?lái)一篇淺談python中的getattr函數(shù) hasattr函數(shù)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06Python mutiprocessing多線程池pool操作示例
這篇文章主要介紹了Python mutiprocessing多線程池pool操作,結(jié)合實(shí)例形式分析了Python多線程模塊multiprocessing進(jìn)程池相關(guān)操作技巧,需要的朋友可以參考下2019-01-01非常詳細(xì)的Django連接mysql數(shù)據(jù)庫(kù)步驟記錄
我的Mysql中已經(jīng)有了項(xiàng)目需要使用的相關(guān)數(shù)據(jù)庫(kù),現(xiàn)在需要通過(guò)django來(lái)獲取Mysql里的數(shù)據(jù)并使用,下面這篇文章主要給大家介紹了關(guān)于非常詳細(xì)的Django連接mysql數(shù)據(jù)庫(kù)步驟,需要的朋友可以參考下2022-10-10sqlalchemy實(shí)現(xiàn)時(shí)間列自動(dòng)更新教程
這篇文章主要介紹了sqlalchemy實(shí)現(xiàn)時(shí)間列自動(dòng)更新教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09python中調(diào)試或排錯(cuò)的五種方法示例
這篇文章主要給大家介紹了關(guān)于python中調(diào)試或排錯(cuò)的五種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09