深入探究Flask-JWT——一個基於Flask的JSON Web Token實現

一、Flask-JWT是什麼?

JSON Web Token(JWT)是一種用於網站認證的令牌(JSON-based access token),用於在網絡應用系統中傳遞聲明。Flask-JWT,顧名思義,是一個基於 Flask 開發的 JWT 實現,它通過令牌的形式,完成了用戶認證和授權的過程。

通過 Flask-JWT,我們可以快速、方便地在基於 Flask 的應用中添加 JWT 鑒權認證方式。應用中的每個路由請求都需要在請求頭中帶上 JWT 令牌,才能夠訪問到服務端的資源。這種機制保證了數據的安全性,有效地防止了非法用戶的訪問請求。

二、令牌生成和操作

在 Flask-JWT 中使用 JWT 進行用戶認證和授權,有關JWT的生成、解析、驗證等工作都是在 Flask-JWT 的基礎上完成的。因此,我們需要先了解 Flask-JWT 的生成和操作過程。

1、安裝Flask-JWT

pip install flask-jwt-extended

2、使用Flask-JWT生成JWT Token

在Flask-JWT中,JWT Token是通過調用flask_jwt_extended.create_access_token()接口來生成的。

from flask import Flask
from flask_jwt_extended import create_access_token

app = Flask(__name__)

access_token = create_access_token(identity='user_id')

3、Token解析與驗證

在Flask-JWT中,Token解析及驗證的工作是由flask_jwt_extended.JWTManager進行完成的。

from flask import Flask
from flask_jwt_extended import JWTManager

app = Flask(__name__)

jwt = JWTManager(app)

@jwt_required
def get_user():
    return jsonify(current_user)

三、JWT Token 的過期管理

JWT Token具有時效特性,一旦過期,便不能再被訪問。Flask-JWT 還提供了過期管理的功能,我們可以通過下面的配置來實現 Token 過期後自動續期。

app.config['JWT_ACCESS_TOKEN_EXPIRES'] = timedelta(hours=1)

四、JWT Token 中的權限管理

在 Flask-JWT 中,我們可以通過 @jwt_required() 裝飾器來自動管理訪問權限。

from flask_jwt_extended import jwt_required, get_jwt_identity

@app.route('/users/me')
@jwt_required
def get_me():
    current_user = get_jwt_identity()
    return jsonify(logged_in_as=current_user), 200

五、JWT Token中的資源權限限制

Flask-JWT還可以通過對Token中添加資源的類別和權限信息進行資源權限限制。

from flask_jwt_extended import jwt_required, get_jwt_claims

@app.route('/admin_only')
@jwt_required
def admin_only():
    claims = get_jwt_claims()
    if claims.get('is_admin') != True:
        return jsonify(msg='Admins only!'), 403
    return jsonify(msg='Welcome Admin!'), 200

六、結語

通過 Flask-JWT,我們可以快速、方便地在基於 Flask 的應用中添加 JWT 鑒權認證方式,有效地提高應用的安全性。當然,我們在使用 Flask-JWT 的過程中也需要注意安全隱患的存在,並進行相應的安全防護措施。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/308272.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-03 14:48
下一篇 2025-01-03 14:48

相關推薦

  • 做Python的Flask開發,必須安裝PyCharm

    PyCharm是一款專業的Python集成開發環境(IDE),適用於Flask、Django等Web開發框架,提供了強大的代碼編輯、調試和版本控制等功能,大大提高了開發效率和代碼質…

    編程 2025-04-29
  • JWT驗證Token的實現

    本文將從以下幾個方面對JWT驗證Token進行詳細的闡述,包括:JWT概述、JWT驗證Token的意義、JWT驗證Token的過程、JWT驗證Token的代碼實現、JWT驗證Tok…

    編程 2025-04-29
  • 如何通過knife4j設置全局token

    本文將介紹如何在使用knife4j作為接口文檔管理工具時,通過設置全局token來提高接口文檔的安全性。 一、什麼是knife4j Knife4j是一款基於springfox的開源…

    編程 2025-04-27
  • JWT String Argument Cannot Be Null or Empty

    JWT(JSON Web Token)是一種用於進行身份驗證的標準。在使用JWT時,經常會遇到「JWT String Argument Cannot Be Null or Empt…

    編程 2025-04-27
  • 使用Python Flask和Echarts展示疫情數據

    這篇文章將介紹如何使用Python Flask和Echarts製作一個能夠展示疫情統計數據的網頁。 一、安裝依賴庫 首先,需要安裝Python Flask和Echarts的依賴庫。…

    編程 2025-04-27
  • 深入解析Vue3 defineExpose

    Vue 3在開發過程中引入了新的API `defineExpose`。在以前的版本中,我們經常使用 `$attrs` 和` $listeners` 實現父組件與子組件之間的通信,但…

    編程 2025-04-25
  • 深入理解byte轉int

    一、位元組與比特 在討論byte轉int之前,我們需要了解位元組和比特的概念。位元組是計算機存儲單位的一種,通常表示8個比特(bit),即1位元組=8比特。比特是計算機中最小的數據單位,是…

    編程 2025-04-25
  • 深入理解Flutter StreamBuilder

    一、什麼是Flutter StreamBuilder? Flutter StreamBuilder是Flutter框架中的一個內置小部件,它可以監測數據流(Stream)中數據的變…

    編程 2025-04-25
  • 深入探討OpenCV版本

    OpenCV是一個用於計算機視覺應用程序的開源庫。它是由英特爾公司創建的,現已由Willow Garage管理。OpenCV旨在提供一個易於使用的計算機視覺和機器學習基礎架構,以實…

    編程 2025-04-25
  • 深入了解scala-maven-plugin

    一、簡介 Scala-maven-plugin 是一個創造和管理 Scala 項目的maven插件,它可以自動生成基本項目結構、依賴配置、Scala文件等。使用它可以使我們專註於代…

    編程 2025-04-25

發表回復

登錄後才能評論