Python使用JWT的超詳細(xì)教程
一、JWT的介紹
JWT(JSON Web Tokens)是一種用于在網(wǎng)絡(luò)應(yīng)用環(huán)境間安全地傳輸信息的簡潔的、URL安全的令牌標(biāo)準(zhǔn)。JWT的聲明一般被用來在身份提供者和服務(wù)提供者間傳遞被認(rèn)證的用戶身份信息,以便于從資源服務(wù)器獲取資源,也可以增加一些額外的其它業(yè)務(wù)邏輯所必須的聲明信息,該token也可直接被用于認(rèn)證,也可被加密。
二、JWT的組成
JWT的結(jié)構(gòu)分為三部分,它是用點(diǎn)來分割的,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ù)載、秘密通過指定的算法進(jìn)行簽名。簽名的作用是保證JWT的發(fā)送者不能抵賴自己發(fā)送的消息,接收者能夠驗(yàn)證消息的完整性。這里是將前2部分的密文拼接起來,對這2部分進(jìn)行HS256加密,然后加鹽,最后在對加密后的內(nèi)容用Base64加密一次
三、Python寫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的一個有效時間,有效時間為12個小時
token = jwt.encode(headers=headers, payload=payload, algorithm='HS256', key='123') # 對上面內(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的一個有效時間,有效時間為12個小時
token = jwt.encode(headers=headers, payload=payload, algorithm='HS256', key='123') # 對上面內(nèi)容進(jìn)行加密,這里的key就是加的鹽,是自定義的,我們在使用鹽的時候一般是唯一的一個值
print(token)
return token
def decode_JWT(token):
content = jwt.decode(jwt=token, key='123', algorithms=['HS256']) # 對jwt進(jìn)行解密,這里用的key必須和上面用的key一樣,否則是無法解密出來的
print(content)
if __name__ == '__main__':
token = create_jwt()
decode_JWT(token)解密出來的結(jié)果如下圖

總結(jié)
到此這篇關(guān)于Python使用JWT的文章就介紹到這了,更多相關(guān)Python使用JWT內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python中JWT用戶認(rèn)證的實(shí)現(xiàn)
- Python 基于jwt實(shí)現(xiàn)認(rèn)證機(jī)制流程解析
- Python 身份驗(yàn)證和授權(quán)庫使用詳解(python jwt庫)
- python-jwt用戶認(rèn)證食用教學(xué)的實(shí)現(xiàn)方法
- Python JWT 介紹和使用詳解
- Python JWT認(rèn)證與pyjwt包詳細(xì)介紹
- Python?PyJWT庫簡化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實(shí)現(xiàn)端口流量轉(zhuǎn)發(fā)的示例代碼
端口流量轉(zhuǎn)發(fā)(Port Forwarding)是一種網(wǎng)絡(luò)通信技術(shù),用于將特定的網(wǎng)絡(luò)流量從一個端口或網(wǎng)絡(luò)地址轉(zhuǎn)發(fā)到另一個端口或地址,它在網(wǎng)絡(luò)中扮演著一個非常重要的角色,在Python語言中實(shí)現(xiàn)端口轉(zhuǎn)發(fā)非常容易,文中有相關(guān)的代碼示例,需要的朋友可以參考下2023-11-11
Python實(shí)現(xiàn)字符串與數(shù)組相互轉(zhuǎn)換功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)字符串與數(shù)組相互轉(zhuǎn)換功能,結(jié)合具體實(shí)例形式分析了Python字符串與數(shù)組相關(guān)轉(zhuǎn)換功能的相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下2017-09-09
pandas如何統(tǒng)計(jì)某一列或某一行的缺失值數(shù)目
這篇文章主要介紹了pandas如何統(tǒng)計(jì)某一列或某一行的缺失值數(shù)目,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05

