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)證的用戶(hù)身份信息,以便于從資源服務(wù)器獲取資源,也可以增加一些額外的其它業(yè)務(wù)邏輯所必須的聲明信息,該token也可直接被用于認(rèn)證,也可被加密。
二、JWT的組成
JWT的結(jié)構(gòu)分為三部分,它是用點(diǎn)來(lái)分割的,Header(頭部),Payload(負(fù)載),Signature(簽名)。如下圖

1、Header(頭部)
頭部通常包含了兩部分信息:聲明類(lèi)型和使用什么算法,第一部分就是將json轉(zhuǎn)化為字符串,然后用Base64加密,如下格式
{
"alg":"HS256",
"type":"jwt"
}2、Payload(負(fù)載)
負(fù)載里面通常就是我們要傳遞給前端的值,如用戶(hù)的一些信息啊,也是將json轉(zhuǎn)換為字符串,然后用Base64加密,如下格式
{
"id":"123",
"username":"xiaoming"
}3、Signature(簽名)
簽名的作用是保證JWT的未被篡改。簽名的生成方式是將編碼后的頭部、編碼后的負(fù)載、秘密通過(guò)指定的算法進(jìn)行簽名。簽名的作用是保證JWT的發(fā)送者不能抵賴(lài)自己發(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的頭部,包含了類(lèi)型和算法的指定
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的頭部,包含了類(lèi)型和算法的指定
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用戶(hù)認(rèn)證的實(shí)現(xiàn)
- Python 基于jwt實(shí)現(xiàn)認(rèn)證機(jī)制流程解析
- Python 身份驗(yàn)證和授權(quán)庫(kù)使用詳解(python jwt庫(kù))
- python-jwt用戶(hù)認(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-06
Python mutiprocessing多線(xiàn)程池pool操作示例
這篇文章主要介紹了Python mutiprocessing多線(xiàn)程池pool操作,結(jié)合實(shí)例形式分析了Python多線(xiàn)程模塊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-10
sqlalchemy實(shí)現(xiàn)時(shí)間列自動(dòng)更新教程
這篇文章主要介紹了sqlalchemy實(shí)現(xiàn)時(shí)間列自動(dòng)更新教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09
python中調(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

