JWT實現過程及應用

2022-04-10 20:21:46 字數 2412 閱讀 6772

# 使用者登入,返回給客戶端token(服務端不儲存),使用者帶著token,服務端拿到token再校驗;

1,提交使用者名稱和密碼給服務端,如果登陸成功,jwt會建立乙個token,並返回;

第一段:header,內部包含 (演算法/token型別)

# json轉化字串做base64url加密,可反解

第二段:payload,包含(標準中註冊的宣告、公共宣告、私有宣告(使用者資訊))

""" 註冊的宣告

iss: jwt簽發者

sub: jwt所面向的使用者

aud: 接收jwt的一方

exp: jwt的過期時間,這個過期時間必須要大於簽發時間

nbf: 定義在什麼時間之前,該jwt都是不可用的.

iat: jwt的簽發時間

jti: jwt的唯一身份標識,主要用來作為一次性token,從而迴避重放攻擊。

"""# json轉化字串做base64url加密,可反解

第三段:

1,將第一段和第二段的密文拼接

2,hs256加密 + 加鹽

3,對hs256加密後的密文再用 base64url 加密

2,使用者訪問,需要攜帶token,後端進行校驗

1,獲取token

2,切割,對第二段解密,獲取payload資訊,檢測是否超時

3,把第一段和第二段的密文拼接,再次執行hs256加密 + 加鹽 得到 密文

4,密文 == token 匹配 (如果修改超時時間 則不通過)

安裝: pip install pyjwt

import jwt

import datetime

from rest_framework.views import apiview

from rest_framework.response import response

from jwt import exceptions

from api import models

class loginapiview(apiview):

def get(self, request, *args, **kwargs):

# 鹽sail = "sadjmasklfn63a5s62dwa@ddas/352asdfa"

"""1,獲取token

2,切割,對第二段解密,獲取payload資訊,檢測是否超時

3,把第一段和第二段的密文拼接,再次執行hs256加密 + 加鹽 得到 密文

4,密文 == token 匹配 (如果修改超時時間 則不通過)

"""token = request.query_params.get("token")

verified_payload = none

msg = ''

try:

# 反解出來的第二段資料

verified_payload = jwt.decode(token, sail, true)

except exceptions.expiredsignatureerror: # 超時

msg = "token失效"

except jwt.decodeerror:

msg = "token認證失敗"

except jwt.invalidtokenerror:

msg = "非法token"

if not verified_payload:

return response()

# print(verified_payload["id"],verified_payload["username"])

return response()

def post(self, request, *args, **kwargs):

user = request.data.get('username')

pswd = request.data.get('password')

obj = models.userinfo.objects.filter(username=user, password=pswd).first()

if obj:

# 鹽sail = "sadjmasklfn63a5s62dwa@ddas/352asdfa"

# 構造 第一段: header, 內部包含(演算法 / token型別) 預設

headers =

# 第二段: payload, 包含(標準中註冊的宣告、公共宣告、私有宣告(使用者資訊))

payload =

res_token = jwt.encode(headers=headers, payload=payload, key=sail, algorithm='hs256').decode('utf-8')

return response()

return response("0")

go實現jwt驗證過程

jwt驗證在分布式系統中作為許可權驗證模組的乙個中介軟體,地位尤其重要,特此在這用 記錄一下簡單的設計流程 myclaims 自定義宣告結構體並內嵌jwt.standardclaims jwt包自帶的jwt.standardclaims只包含了官方字段 我們這裡需要額外記錄乙個username欄位,...

jwt原理及簡單實現

文章2 編碼 乙個token是一串base64字元,大概分成head payload sign三部分,這三部分以.分割。其中head記錄的是加密演算法,payload記錄的是你定義的一些資訊,sign則是head base64字元 payload base64字元 秘鑰的加密base64字元。解碼 ...

jwt 私鑰 使用JWT實現Token認證

json web token的結構是什麼樣的 json web token由三部分組成,它們之間用圓點 連線。這三部分分別是 header payload signature 因此,乙個典型的jwt看起來是這個樣子的 xx.yyyyy.zzzzz 接下來,具體看一下每一部分 header heade...