在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

后端JWT接口認證的操作流程

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-10-31 11:20 ? 次閱讀

為了反爬或限流節流,后端編寫接口時,大部分 API 都會進行權限認證,只有認證通過,即:數據正常及未過期才會返回數據,否則直接報錯

本篇文章以 Django 為例,聊聊后端 JWT 接口認證的操作流程

2. JWT 介紹

JWT 全稱為 JSON Web Token,是目前主流的跨域認證解決方案

數據結構由 3 部分組成,中間由「 **. ** 」分割開

它們分別是:

  • Header 頭部
  • Payload 負載
  • Signature 簽名
# JWT 數據的格式
# 組成方式:頭部.負載.簽名
Header.Payload.Signature

其中

Header 用于設置簽名算法及令牌類型,默認簽名算法為 「 HS256 」,令牌類型可以設置為「 JWT 」

Payload 用于設置需要傳遞的數據,包含:iss 簽發人、exp 過期時間、iat 簽發時間等

Signature 用于對 Header 和 Payload 進行簽名,默認使用的簽名算法為 Header 中指定的算法

# JWT 數據組成
# Header. Payload. Signature
# Header:{ "alg": "HS256","typ": "JWT"}
# Payload:iss、exp、iat等
# Signature:簽名
Signature = HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

PS:base64UrlEncode 相比 Base64 算法,會將結果中的「 = 」省略、「 + 」替換成「 - 」、「 / 」替換成「 _ 」

3. 實戰一下

首先,在虛擬環境中安裝 JWT 依賴包

# 安裝jwt依賴包
pip3 install pyjwt

然后,定義一個方法用于生成 JWT Token

需要注意的是,生成 JWT Token 時需要指定過期時間、加密方式等

import time
import jwt
from django.conf import settings

def generate_jwt_token(user):
    """
    生成一個JWT Token
    :param user:
    :return:
    """
    # 設置token的過期時間戳
    # 比如:設置7天過期
    timestamp = int(time.time()) + 60 * 60 * 24 * 7

    # 加密生成Token
    # 加密方式:HS256
    return jwt.encode({"userid": user.pk, "exp": timestamp}, settings.SECRET_KEY,'HS256')

接著,編寫一個認證類

該類繼承于「 BaseAuthentication 」基類,重寫內部函數「 authenticate() 」,對請求參數進行 JWT 解密,并進行數據庫查詢,只有認證通過才返回數據,否則拋出異常

import time

import jwt
from django.conf import settings
from django.contrib.auth import get_user_model
from rest_framework import exceptions
from rest_framework.authentication import BaseAuthentication, get_authorization_header

User = get_user_model()

class JWTAuthentication(BaseAuthentication):
    """自定義認證類"""

    keyword = 'jwt'
    model = None

    def get_model(self):
        if self.model is not None:
            return self.model
        from rest_framework.authtoken.models import Token
        return Token

    """
    A custom token model may be used, but must have the following properties.

    * key -- The string identifying the token
    * user -- The user to which the token belongs
    """

    def authenticate(self, request):
        auth = get_authorization_header(request).split()

        if not auth or auth[0].lower() != self.keyword.lower().encode():
            return None

        if len(auth) !=2:
            raise exceptions.AuthenticationFailed("認證異常!")

        # jwt解碼
        try:
            jwt_token = auth[1]
            jwt_info = jwt.decode(jwt_token, settings.SECRET_KEY,'HS256')

            # 獲取userid
            userid = jwt_info.get("userid")

            # 查詢用戶是否存在
            try:
                user = User.objects.get(pk=userid)
                return user, jwt_token
            except Exception:
                raise exceptions.AuthenticationFailed("用戶不存在")
        except jwt.ExpiredSignatureError:
            raise exceptions.AuthenticationFailed("抱歉,該token已過期!")

最后,在視圖集 ViewSet 中,只需要在屬性「 authentication_classes 」中指定認證列表即可

from rest_framework import viewsets
from .models import *
from .serializers import *
from .authentications import *

class GoodsViewSet(viewsets.ModelViewSet):
    # 所有商品數據
    queryset = Goods.objects.all()

    # 序列化
    serializer_class = GoodsSerializer

    # JWT授權
    authentication_classes = [JWTAuthentication]

4. 最后

在實際項目中,一般在登錄的時候生成 JWT Token,后續接口中只需要在請求頭中設置 JWT Token 即可正常返回數據

import requests

url = "***.***.****"

payload={}
headers = {
  'AUTHORIZATION': 'jwt eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyaWQiOiJVTmJCRTJTRlNndm5DU0c3amdQZGJVIiwiZXhwIjoxNjI2MDk5NDA5fQ.cxXsRulEWWQotNpb7XwlZbISrrpb7rSRCjkLsyb8WDM'
}

response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8680

    瀏覽量

    151600
  • 數據
    +關注

    關注

    8

    文章

    7116

    瀏覽量

    89338
  • API
    API
    +關注

    關注

    2

    文章

    1509

    瀏覽量

    62245
  • 虛擬環境
    +關注

    關注

    0

    文章

    27

    瀏覽量

    8963
收藏 人收藏

    評論

    相關推薦

    Protal wifidog的認證流程

    服務器的portal接口,附帶參數gw_id viii. 認證服務器的的portal接口根據業務流成顯示廣告業或者做其他的跳轉 ix. 整個認證流程
    發表于 07-24 08:10

    沙特SABER認證操作流程

    沙特沙特SABER認證分PC(產品證書認證)和SC(驗貨證書)兩部分,其中PC證書一年有效,一年內部需要重復去做,SC證書針對當票貨物,每次出貨都需要重新申請,以下是操作流程,希望對大
    發表于 12-18 15:30

    IPD流程操作細則

    IPD流程操作細則:IPD流程操作細則IPD流程操作指引--立項階段工作
    發表于 05-07 23:00 ?102次下載

    數字后端設計流程

    數字后端流程 1. 數據準備。對于 CDN 的 Silicon Ensemble而言后端設計所需的數據主要有是Foundry廠提供的標準單元、宏單元和I/O Pad的庫文件,它包括物理庫、時序庫及網表庫,分別以.lef、
    發表于 10-28 10:31 ?40次下載

    IC設計前后端流程與EDA工具介紹

    本文首先介紹了ic設計的方法,其次介紹了IC設計前段設計的主要流程及工具,最后介紹了IC設計后端設計的主要流程及工具。
    發表于 04-19 18:04 ?1.2w次閱讀

    如何才能保證JWT安全

    jwt是什么? JWTs是JSON對象的編碼表示。JSON對象由零或多個名稱/值對組成,其中名稱為字符串,值為任意JSON值。JWT有助于在clear(例如在URL中)發送這樣的信息,可以被信任
    的頭像 發表于 09-29 15:09 ?3342次閱讀

    MicroProfile JWT Auth MicroProfile的JWT RBAC規范

    microprofile-jwt-auth.zip
    發表于 05-07 10:04 ?0次下載
    MicroProfile <b class='flag-5'>JWT</b> Auth MicroProfile的<b class='flag-5'>JWT</b> RBAC規范

    jwt-auth基于ThinkPHP的jwt框架

    ./oschina_soft/gitee-jwt-auth.zip
    發表于 06-30 09:10 ?1次下載
    <b class='flag-5'>jwt</b>-auth基于ThinkPHP的<b class='flag-5'>jwt</b>框架

    SpringBoot 后端接口規范(上)

    一個后端接口大致分為四個部分組成: 接口地址(url)、接口請求方式(get、post等)、請求數據(request)、響應數據(response) 。雖然說后端接口的編寫并沒有統一規
    的頭像 發表于 05-05 17:00 ?814次閱讀
    SpringBoot <b class='flag-5'>后端接口</b>規范(上)

    SpringBoot 后端接口規范(中)

    一個后端接口大致分為四個部分組成: 接口地址(url)、接口請求方式(get、post等)、請求數據(request)、響應數據(response) 。雖然說后端接口的編寫并沒有統一規
    的頭像 發表于 05-05 17:01 ?668次閱讀
    SpringBoot <b class='flag-5'>后端接口</b>規范(中)

    SpringBoot 后端接口規范(下)

    一個后端接口大致分為四個部分組成:接口地址(url)、接口請求方式(get、post等)、請求數據(request)、響應數據(response)。雖然說后端接口的編寫并沒有統一規范要
    的頭像 發表于 05-05 17:02 ?642次閱讀

    ic設計前端到后端流程 ic設計的前端和后端的區別

    IC(Integrated Circuit)設計涉及兩個主要的階段:前端設計和后端設計。它們在IC設計流程中扮演著不同的角色和職責,具有以下區別
    的頭像 發表于 08-15 14:49 ?4620次閱讀

    JWT認證流程

    今天帶大家來認識一下JWTJWT簡介 JWT(Json Web Token)是為了在網絡應用環境間傳遞聲明而執行的一種基于 Json 的開放標準。JWT 的聲明一般被用來在身份提供
    的頭像 發表于 10-08 15:01 ?1315次閱讀
    <b class='flag-5'>JWT</b>的<b class='flag-5'>認證</b><b class='flag-5'>流程</b>

    springboot前后端交互流程

    Boot 進行開發時,前后端交互是一個非常重要的部分,本文將詳細介紹 Spring Boot 前后端交互的流程。 前后端交互的基本原理 在前后端
    的頭像 發表于 11-22 16:00 ?2209次閱讀

    什么是JWTJWT由哪些部分組成?JWT如何進行用戶認證

    JWT(JSON Web Token)是一個開放的行業標準(RFC 7519),自身包含了身份驗證所需要的所有信息,因此我們的服務器不需要存儲用戶Session信息。
    的頭像 發表于 02-25 09:44 ?3879次閱讀
    什么是<b class='flag-5'>JWT</b>?<b class='flag-5'>JWT</b>由哪些部分組成?<b class='flag-5'>JWT</b>如何進行用戶<b class='flag-5'>認證</b>?
    主站蜘蛛池模板: 美女被视频网站在线看九色| 精品久久免费观看| 在线亚洲色图| 丁香综合在线| 大美女久久久久久j久久| 四虎东方va私人影库在线观看| 五月丁香| 亚洲天堂伦理| 中文天堂| 轻点灬大ji巴太粗太长了啊h| 国产精品色片| 欧美久久天天综合香蕉伊| 伊人免费网| www.91在线| 天天看天天做| 成人午夜小视频手机在线看| 黑人干亚洲| 中文字幕在线资源| 四虎影院大全| 美国一级做a一级爱视频| 国产精品久久久亚洲| 国产色拍| 新版天堂中文资源8在线| 在线资源网| 日本美女黄色一级片| 天天插天天舔| 天天射天天干天天色| 狠狠干夜夜操| 911色_911色sss在线观看| dy888午夜秋霞影院不卡| 激情五月亚洲| 国产婷婷| www.亚洲5555.com| 国产精品久久久久久一级毛片| 天堂资源wwww在线看| 四虎电影免费观看网站| 猛操网| 亚洲国产综合视频| www干| 一级毛片视屏| 天堂网成人|