chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

后端JWT接口認(rèn)證的操作流程

科技綠洲 ? 來源:Python實(shí)用寶典 ? 作者:Python實(shí)用寶典 ? 2023-10-31 11:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

為了反爬或限流節(jié)流,后端編寫接口時(shí),大部分 API 都會(huì)進(jìn)行權(quán)限認(rèn)證,只有認(rèn)證通過,即:數(shù)據(jù)正常及未過期才會(huì)返回?cái)?shù)據(jù),否則直接報(bào)錯(cuò)

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

2. JWT 介紹

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

數(shù)據(jù)結(jié)構(gòu)由 3 部分組成,中間由「 **. ** 」分割開

它們分別是:

  • Header 頭部
  • Payload 負(fù)載
  • Signature 簽名
# JWT 數(shù)據(jù)的格式
# 組成方式:頭部.負(fù)載.簽名
Header.Payload.Signature

其中

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

Payload 用于設(shè)置需要傳遞的數(shù)據(jù),包含:iss 簽發(fā)人、exp 過期時(shí)間、iat 簽發(fā)時(shí)間等

Signature 用于對(duì) Header 和 Payload 進(jìn)行簽名,默認(rèn)使用的簽名算法為 Header 中指定的算法

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

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

3. 實(shí)戰(zhàn)一下

首先,在虛擬環(huán)境中安裝 JWT 依賴包

# 安裝jwt依賴包
pip3 install pyjwt

然后,定義一個(gè)方法用于生成 JWT Token

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

import time
import jwt
from django.conf import settings

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

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

接著,編寫一個(gè)認(rèn)證類

該類繼承于「 BaseAuthentication 」基類,重寫內(nèi)部函數(shù)「 authenticate() 」,對(duì)請(qǐng)求參數(shù)進(jìn)行 JWT 解密,并進(jìn)行數(shù)據(jù)庫查詢,只有認(rèn)證通過才返回?cái)?shù)據(jù),否則拋出異常

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):
    """自定義認(rèn)證類"""

    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("認(rèn)證異常!")

        # 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 」中指定認(rèn)證列表即可

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

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

    # 序列化
    serializer_class = GoodsSerializer

    # JWT授權(quán)
    authentication_classes = [JWTAuthentication]

4. 最后

在實(shí)際項(xiàng)目中,一般在登錄的時(shí)候生成 JWT Token,后續(xù)接口中只需要在請(qǐng)求頭中設(shè)置 JWT Token 即可正常返回?cái)?shù)據(jù)

import requests

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

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

response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    9005

    瀏覽量

    153769
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7256

    瀏覽量

    91892
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1620

    瀏覽量

    64059
  • 虛擬環(huán)境
    +關(guān)注

    關(guān)注

    0

    文章

    29

    瀏覽量

    9059
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Protal wifidog的認(rèn)證流程

    服務(wù)器的portal接口,附帶參數(shù)gw_id viii. 認(rèn)證服務(wù)器的的portal接口根據(jù)業(yè)務(wù)流成顯示廣告業(yè)或者做其他的跳轉(zhuǎn) ix. 整個(gè)認(rèn)證流程
    發(fā)表于 07-24 08:10

    HarmonyOS5云服務(wù)技術(shù)分享--自有賬號(hào)對(duì)接AGC認(rèn)證

    ; 銷戶需確保用戶在??5分鐘內(nèi)登錄過??,否則需重新認(rèn)證 ??敏感操作保護(hù)?? 修改密碼、重置賬號(hào)等操作需二次驗(yàn)證,提升安全性 ?? ??五、避坑指南?? ??Token有效期??:建議
    發(fā)表于 05-22 16:32

    沙特SABER認(rèn)證操作流程

    沙特沙特SABER認(rèn)證分PC(產(chǎn)品證書認(rèn)證)和SC(驗(yàn)貨證書)兩部分,其中PC證書一年有效,一年內(nèi)部需要重復(fù)去做,SC證書針對(duì)當(dāng)票貨物,每次出貨都需要重新申請(qǐng),以下是操作流程,希望對(duì)大
    發(fā)表于 12-18 15:30

    數(shù)字后端設(shè)計(jì)流程

    數(shù)字后端流程 1. 數(shù)據(jù)準(zhǔn)備。對(duì)于 CDN 的 Silicon Ensemble而言后端設(shè)計(jì)所需的數(shù)據(jù)主要有是Foundry廠提供的標(biāo)準(zhǔn)單元、宏單元和I/O Pad的庫文件,它包括物理庫、時(shí)序庫及網(wǎng)表庫,分別以.lef、
    發(fā)表于 10-28 10:31 ?40次下載

    IC設(shè)計(jì)前后端流程與EDA工具介紹

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

    如何才能保證JWT安全

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

    MicroProfile JWT Auth MicroProfile的JWT RBAC規(guī)范

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

    jwt-auth基于ThinkPHP的jwt框架

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

    SpringBoot 后端接口規(guī)范(上)

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

    SpringBoot 后端接口規(guī)范(中)

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

    SpringBoot 后端接口規(guī)范(下)

    一個(gè)后端接口大致分為四個(gè)部分組成:接口地址(url)、接口請(qǐng)求方式(get、post等)、請(qǐng)求數(shù)據(jù)(request)、響應(yīng)數(shù)據(jù)(response)。雖然說后端接口的編寫并沒有統(tǒng)一規(guī)范要
    的頭像 發(fā)表于 05-05 17:02 ?907次閱讀

    ic設(shè)計(jì)前端到后端流程 ic設(shè)計(jì)的前端和后端的區(qū)別

    IC(Integrated Circuit)設(shè)計(jì)涉及兩個(gè)主要的階段:前端設(shè)計(jì)和后端設(shè)計(jì)。它們?cè)贗C設(shè)計(jì)流程中扮演著不同的角色和職責(zé),具有以下區(qū)別
    的頭像 發(fā)表于 08-15 14:49 ?5536次閱讀

    JWT認(rèn)證流程

    今天帶大家來認(rèn)識(shí)一下JWT。 JWT簡(jiǎn)介 JWT(Json Web Token)是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于 Json 的開放標(biāo)準(zhǔn)。JWT 的聲明一般被用來在身份提供
    的頭像 發(fā)表于 10-08 15:01 ?1798次閱讀
    <b class='flag-5'>JWT</b>的<b class='flag-5'>認(rèn)證</b><b class='flag-5'>流程</b>

    springboot前后端交互流程

    Boot 進(jìn)行開發(fā)時(shí),前后端交互是一個(gè)非常重要的部分,本文將詳細(xì)介紹 Spring Boot 前后端交互的流程。 前后端交互的基本原理 在前后端
    的頭像 發(fā)表于 11-22 16:00 ?3219次閱讀

    什么是JWTJWT由哪些部分組成?JWT如何進(jìn)行用戶認(rèn)證?

    JWT(JSON Web Token)是一個(gè)開放的行業(yè)標(biāo)準(zhǔn)(RFC 7519),自身包含了身份驗(yàn)證所需要的所有信息,因此我們的服務(wù)器不需要存儲(chǔ)用戶Session信息。
    的頭像 發(fā)表于 02-25 09:44 ?5650次閱讀
    什么是<b class='flag-5'>JWT</b>?<b class='flag-5'>JWT</b>由哪些部分組成?<b class='flag-5'>JWT</b>如何進(jìn)行用戶<b class='flag-5'>認(rèn)證</b>?