中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

rest framework jwt怎么在Django中使用

發布時間:2021-03-24 15:38:32 來源:億速云 閱讀:207 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關rest framework jwt怎么在Django中使用,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

一簡介

JWT 是一個開放標準(RFC 7519),它定義了一種用于簡潔,自包含的用于通信雙方之間以 JSON 對象的形式安全傳遞信息的方法。該信息可以被驗證和信任,因為它是數字簽名的。JWTS可以使用秘密(使用HMAC算法)或公鑰/私鑰對使用RSA或ECDSA來簽名。

JWT的組成部分:

header

Header是由下面這個格式的Json通過Base64編碼(編碼不是加密,是可以通過反編碼的方式獲取到這個原來的Json,所以JWT中存放的一般是不敏感的信息)生成的字符串,Header中存放的內容是說明編碼對象是一個JWT以及使用“SHA-256”的算法進行加密(加密用于生成Signature)

playload

Payload是通過Claim進行Base64轉碼之后生成的一串字符串,Claim是一個Json,Claim中存放的內容是JWT自身的標準屬性,所有的標準屬性都是可選的,可以自行添加,比如:JWT的簽發者、JWT的接收者、JWT的持續時間等;同時Claim中也可以存放一些自定義的屬性,這個自定義的屬性就是在用戶認證中用于標明用戶身份的一個屬性,比如用戶存放在數據庫中的id,為了安全起見,一般不會將用戶名及密碼這類敏感的信息存放在Claim中。將Claim通過Base64轉碼之后生成的一串字符串稱作Payload。

signatrue

Signature是由Header和Payload組合而成,將Header和Claim這兩個Json分別使用Base64方式進行編碼,生成字符串Header和Payload,然后將Header和Payload以Header.Payload的格式組合在一起形成一個字符串,然后使用上面定義好的加密算法和一個密匙(這個密匙存放在服務器上,用于進行驗證)對這個字符串進行加密,形成一個新的字符串,這個字符串就是Signature。

簽名的目的:最后一步簽名的過程,實際上是對頭部以及負載內容進行簽名,防止內容被竄改。如果有人對頭部以及負載的內容解碼之后進行修改,再進行編碼,最后加上之前的簽名組合形成新的JWT的話,那么服務器端會判斷出新的頭部和負載形成的簽名和JWT附帶上的簽名是不一樣的。如果要對新的頭部和負載進行簽名,在不知道服務器加密時用的密鑰的話,得出來的簽名也是不一樣的。

rest_framework_jwt

rest_framework_jwt是一個封裝了jwt符合restful規范的接口

網站地址:http://getblimp.github.io/django-rest-framework-jwt/

安裝:pip install djangorestframework-jwt

二、配合drf的認證組件的使用方法

配置文件

#添加rest-framework
INSTALLED_APPS = [
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
  'app01.apps.App01Config',
  "rest_framework",
]
REST_FRAMEWORK = {
  # 配置默認的認證方式 base:賬號密碼驗證
  #session:session_id認證
  'DEFAULT_AUTHENTICATION_CLASSES': (
    # drf的這一階段主要是做驗證,middleware的auth主要是設置session和user到request對象
    # 默認的驗證是按照驗證列表從上到下的驗證
    'rest_framework.authentication.BasicAuthentication',
    'rest_framework.authentication.SessionAuthentication',
    "rest_framework_jwt.authentication.JSONWebTokenAuthentication",
  )}
import datetime
# 超時時間
JWT_AUTH = {
  'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
  # token前綴
  'JWT_AUTH_HEADER_PREFIX': 'JWT',
}
# 引用Django自帶的User表,繼承使用時需要設置
AUTH_USER_MODEL = "app01.User"

模型表

#使用django自帶的auth組件模型表
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class User(AbstractUser):
  phone=models.CharField(max_length=11,null=True)

url路由層

from django.conf.urls import url
from django.contrib import admin
from rest_framework_jwt.views import obtain_jwt_token
from app01 import views
urlpatterns = [
  url(r'^admin/', admin.site.urls),
  # url(r'^home/', views.Home.as_view()),
  # 登入驗證,使用JWT的模塊,只要用戶密碼正確會自動生成一個token返回
  url(r'^login/', obtain_jwt_token),
  # 訪問需要認證的接口
  url(r'^index/', views.Index.as_view()),
]

view視圖層

from django.shortcuts import render
from django.http import JsonResponse
# Create your views here.
from rest_framework.views import APIView
from app01.jwtMiddleware import TokenAuth
class Index(APIView):  #局部認證的配置
  authentication_classes = [TokenAuth,]
  def get(self,request):
    return JsonResponse({"index":"ok"})
class Home(APIView):
  def get(self,request):
    return render(request,"login.html")

rest-framework認證類

from rest_framework.exceptions import AuthenticationFailed
from rest_framework_jwt.serializers import VerifyJSONWebTokenSerializer
class TokenAuth():
  def authenticate(self, request):
    token={"token":None}
    # print(request.META.get("HTTP_TOKEN"))
    token["token"] = request.META.get('HTTP_TOKEN')
    valid_data = VerifyJSONWebTokenSerializer().validate(token)
    print(valid_data)
    user = valid_data['user']
    print(user)
    if user:
      return
    else:
      raise AuthenticationFailed('認證失敗')

模板

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<form action="/login/" method="post">
  <input type="text" name="username">
  <input type="text" name="password">
  <input type="submit" value="登錄">
</form>
</body>
</html>

postman

rest framework jwt怎么在Django中使用

rest framework jwt怎么在Django中使用

上述就是小編為大家分享的rest framework jwt怎么在Django中使用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

枞阳县| 永泰县| 大石桥市| 南开区| 开封县| 墨竹工卡县| 合山市| 攀枝花市| 松溪县| 垣曲县| 兴义市| 沅江市| 太谷县| 崇阳县| 津市市| 汉沽区| 卫辉市| 尉氏县| 基隆市| 师宗县| 南昌县| 始兴县| 南郑县| 临城县| 安福县| 丽江市| 云龙县| 翁源县| 桂平市| 凉城县| 会东县| 内黄县| 彩票| 邵阳市| 晋中市| 康乐县| 五华县| 同心县| 林州市| 叶城县| 甘南县|