jwt原理
載荷就是存放有效資訊的地方,這個裡面可以配置一些引數已經我們需要進行加密的資料字典。一般情況下只需要存放我們的資料和設定乙個過期時間就可以了 根據當前時間設定一分鐘後過期
datetime.datetime.utcnow() + datetime.timedelta(minutes=1)
1.iss: jwt簽發者
sub: jwt所面向的使用者
aud: 接收jwt的一方
exp: jwt的過期時間,這個過期時間必須要大於簽發時間
nbf: 定義在什麼時間之前,該jwt都是不可用的.
iat: jwt的簽發時間
jti: jwt的唯一身份標識,主要用來作為一次性token,從而迴避重放攻擊。
宣告型別,這裡是jwt
宣告加密的演算法 通常直接使用 hmac sha256
完整的頭部就像下面這樣的json:
加鹽,相當於是自己配置了一段秘鑰,在生成token和進行解密效驗時使用,可以防止**被攻擊,資料直接洩露,增加了**一定的安全性
安裝 pip install pyjwt
import jwt
import datetime
dic = ,
}s = jwt.encode(dic, 'secret', algorithm='hs256') # 加密生成字串
print(s)
s = jwt.decode(s, 'secret', issuer='lianzong', algorithms=['hs256']) # 解密,校驗簽名
print(s)
print(type(s))
可以在django 裡面自己配置乙個jwt 然後呼叫使用,如果不熟悉原理可以使用djagnrestframework-jwt
import jwt
import datetime
# payload =
from back_end.settings.dev import secret_key
class
jwt_token
(object):
def__init__
(self,payload)
: headers =
payload[
'exp'
]= datetime.datetime.utcnow(
)+ datetime.timedelta(minutes=1)
self.payload = payload
self.headers = headers
defjwt_encode_handler
(self)
:return jwt.encode(payload=self.payload, key=secret_key, algorithm=
"hs256"
, headers= self.headers )
.decode(
'utf-8'
) @staticmethod
defparse_payload
(token)
: result =
try:
verified_payload = jwt.decode(token, secret_key,
true
) result[
'status']=
true
result[
'data'
]= verified_payload
except jwt.exceptions.expiredsignatureerror:
result[
'error']=
'token已失效'
except jwt.decodeerror:
result[
'error']=
'token認證失敗'
except jwt.invalidtokenerror:
result[
'error']=
'非法的token'
return result
安裝 pip install djangorestframework-jwt
import datetime
jwt配置
jwt_auth =
# 全域性設定的方法,也可在單個檢視中設定
rest_framework =
區域性禁用
authentication_classes =
# 區域性啟用
from user.authentications import jsonwebtokenauthentication
authentication_classes = [jsonwebtokenauthenticatio
# 手動簽發
from rest_framework_jwt.settings import api_settings
jwt_payload_handler = api_settings.jwt_payload_handler
jwt_encode_handler = api_settings.jwt_encode_handler
生成payload 這個可以不使用,這裡是對django模型而言生成的,如果需求用不到,也可以自己設定payload生成token,原理是一樣的
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)
在 GoLang 中使用 jwt 進行認證
jwt 即 json web token,是用 json 形式安全傳輸資訊的方法。對 jwt 解碼,可以得到以下內容 jwt 可以設定過期時間,它的應用主要有 一般服務端生成 jwt 並返回給客戶端時,要放在 cookie裡,並且加上httponly的標記,意味著這個 cookie不能被 js獲取,...
使用jwt生成token驗證登入狀態
在pom檔案引入jwt相關依賴 com.nimbusds groupid nimbus jose jwt artifactid 6.0 version dependency org.assertj groupid assertj core artifactid dependency 生成token字...
DRF中使用JWT,在view中獲取使用者資訊
前提是在django rest framework中使用了jwt 1.由於我是自定義的jwt,之前沒裝djangorestframework jwt,所以先安裝 pip install djangorestframework jwt2.測試 class test apiview 測試介面 def g...