# 使用者登入,返回給客戶端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 pyjwtimport 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...