DRF中使用JWT進行登入驗證

2021-10-25 06:55:45 字數 2827 閱讀 8858

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...