亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

django中如何配置jwt的token認證

發布時間:2021-11-23 14:00:39 來源:億速云 閱讀:295 作者:小新 欄目:編程語言

這篇文章主要介紹django中如何配置jwt的token認證,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

1. jwt簡介

Json web token (JWT), 是為了在網絡應用環境間傳遞聲明而執行的一種基于JSON的開放標準((RFC 7519).該token被設計為緊湊且安全的,特別適用于分布式站點的單點登錄(SSO)場景。JWT的聲明一般被用來在身份提供者和服務提供者間傳遞被認證的用戶身份信息,以便于從資源服務器獲取資源,也可以增加一些額外的其它業務邏輯所必須的聲明信息,該token也可直接被用于認證,也可被加密。

2. jwt構成

jwt就是一段字符串, 由三段信息構成的, 將這三段信息文本用. 鏈接在一起就構成了jwt字符串, 就像這樣:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

第一部分我們稱它為頭部(header), 第二部分我們稱其為載荷(payload, 類似于飛機上承載的物品), 第三部分是簽證(signature).

header

jwt的頭部承載兩部分信息:
a. 聲明類型, 這里是jwt
b. 聲明加密的算法,通常直接使用 HMAC SHA256
完整的頭部就像下面這樣的JSON:

{
    'typ': 'JWT',
    'alg': 'HS256'
}

然后將頭部進行base64加密(該加密是可以對稱解密的), 構成了第一部分

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
payload

載荷就是存放有效信息的地方, 這個名字像是特指承載的貨品, 這些有效信息包含三部分
a. 標準中注冊的聲明
b. 公共的聲明
c. 私有的聲明

標準中注冊的聲明(建議但不強制使用)
  • iss: jwt簽發者

    • sub: jwt所面向的用戶

    • aud: 接收jwt的一方

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

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

    • iat: jwt的簽發時間

    • jti: jwt的唯一身份標識, 主要用來作為一次性token, 從而回避重放***.

公共的聲明:
    公共的聲明可以添加任何的信息, 一般添加用戶的相關信息或其他業務需要的必要信息, 但不建議添加敏感信息, 因為該部分在客戶端可解密
私有的聲明:
私有聲明是提供者和消費者所共同定義的聲明, 一般不建議存放敏感信息, 因為base64是對稱解密的, 意味著該部分信息可以歸類為明文信息

定義一個payload:

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}
signature

JWT的第三部分是一個簽證信息,這個簽證信息由三部分組成:

header (base64后的)

payload (base64后的)

secret

這個部分需要base64加密后的header和base64加密后的payload使用.連接組成的字符串,然后通過header中聲明的加密方式進行加鹽secret組合加密,然后就構成了jwt的第三部分。

// javascript
var encodedString = base64UrlEncode(header) + '.' + base64UrlEncode(payload);

var signature = HMACSHA256(encodedString, 'secret'); // TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

將這三部分用.連接成一個完整的字符串,構成了最終的jwt:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
注意:secret是保存在服務器端的,jwt的簽發生成也是在服務器端的,secret就是用來進行jwt的簽發和jwt的驗證,所以,它就是你服務端的私鑰,在任何場景都不應該流露出去。一旦客戶端得知這個secret, 那就意味著客戶端是可以自我簽發jwt了。

django-rest-framework-jw文檔網站

安裝配置JWT

1. 安裝
pip install djangorestframework-jwt
2. 在配置文件dev.py中增加以下內容:
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    ),
}
import datetime
JWT_AUTH = {
    'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
}

JWT_EXPIRATION_DELTA 指明token的有效期

3. Django REST framework JWT 擴展的說明文檔中提供了手動簽發JWT的方法
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 = jwt_payload_handler(user)
token = jwt_encode_handler(payload)

在用戶注冊或者登錄成功后, 在序列化器中返回用戶信息以后同時返回token即可

4. Django REST framework JWT提供了登錄獲取token的視圖,可以直接使用

在子路由中, 配置路由:

from rest_framework_jwt.views import obtain_jwt_token

urlpatterns = [
    path('login/', obtain_jwt_token),
]
5. 在主路由中, 引入當前子應用的路由文件
urlpatterns = [
    path('users/', include("users.urls")),
    # include 的值必須是模塊名.urls格式, 字符串中間只能出現一個圓點
]

以上是“django中如何配置jwt的token認證”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

山阴县| 青海省| 天门市| 开阳县| 安国市| 团风县| 北碚区| 佛冈县| 郴州市| 东海县| 鄯善县| 沁阳市| 石泉县| 上饶县| 观塘区| 集贤县| 平果县| 吐鲁番市| 连云港市| 册亨县| 玛多县| 河津市| 洪江市| 资源县| 青铜峡市| 关岭| 古田县| 资阳市| 太保市| 和田市| 荔浦县| 湖南省| 林甸县| 城固县| 马山县| 开化县| 孝义市| 尼木县| 荆州市| 隆林| 肥城市|