首页 > 其他分享 >Flask中如何实现JWT认证?

Flask中如何实现JWT认证?

时间:2024-10-20 15:19:49浏览次数:3  
标签:Extended Flask JWT jwt 认证 token key

在Flask中实现JWT(JSON Web Token)认证,通常需要借助第三方库,比如PyJWTFlask-JWT-Extended。下面我会分别介绍如何使用这两个库来实现JWT认证。

使用PyJWT

  1. 安装PyJWT

首先,你需要安装PyJWT库。可以使用pip来安装:

pip install PyJWT
  1. 生成JWT

在Flask应用中,你可以创建一个函数来生成JWT。这个函数通常会接收用户信息(比如用户ID),并使用一个密钥来签名令牌。

import jwt
from datetime import datetime, timedelta

def create_jwt(user_id: int) -> str:
    secret_key = "your-secret-key"  # 请使用一个安全的密钥
    payload = {
        'user_id': user_id,
        'exp': datetime.utcnow() + timedelta(minutes=30)  # 设置令牌过期时间
    }
    token = jwt.encode(payload, secret_key, algorithm='HS256')
    return token
  1. 验证JWT

你还需要一个函数来验证和解码JWT。这个函数会接收一个令牌和一个密钥,并尝试解码令牌。如果令牌无效或已过期,这个函数会抛出一个异常。

def decode_jwt(token: str) -> dict:
    secret_key = "your-secret-key"  # 与生成令牌时使用的密钥相同
    try:
        decoded_token = jwt.decode(token, secret_key, algorithms=['HS256'])
        return decoded_token
    except jwt.exceptions.DecodeError:
        return None  # 或者可以抛出一个自定义异常
  1. 在Flask中使用JWT

你可以在Flask的路由处理函数中使用这些函数来生成和验证JWT。例如,在登录时生成JWT,并在需要身份验证的路由中验证JWT。

使用Flask-JWT-Extended

Flask-JWT-Extended是一个专门为Flask设计的JWT扩展库,它提供了更多高级功能和更好的集成。

  1. 安装Flask-JWT-Extended

使用pip安装Flask-JWT-Extended:

pip install Flask-JWT-Extended
  1. 初始化Flask-JWT-Extended

在你的Flask应用中初始化Flask-JWT-Extended:

from flask import Flask
from flask_jwt_extended import JWTManager

app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'your-secret-key'  # 设置密钥
jwt = JWTManager(app)
  1. 创建和验证JWT

使用Flask-JWT-Extended提供的装饰器和函数来创建和验证JWT。例如,你可以创建一个登录路由来生成JWT,并使用@jwt_required()装饰器来保护需要身份验证的路由。

from flask import request, jsonify
from flask_jwt_extended import create_access_token, jwt_required, get_jwt_identity

@app.route('/login', methods=['POST'])
def login():
    username = request.json.get('username', None)
    password = request.json.get('password', None)
    if username != 'test' or password != 'test':
        return jsonify({"msg": "Bad username or password"}), 401
    access_token = create_access_token(identity=username)
    return jsonify(access_token=access_token), 200

@app.route('/protected', methods=['GET'])
@jwt_required()
def protected():
    current_user = get_jwt_identity()
    return jsonify(logged_in_as=current_user), 200
  1. 运行Flask应用

最后,运行你的Flask应用,并使用Postman或curl等工具来测试JWT认证功能。

标签:Extended,Flask,JWT,jwt,认证,token,key
From: https://blog.csdn.net/qq_43472841/article/details/143053740

相关文章

  • python+flask框架的基于Uniapp的核酸检测系统(开题+程序+论文) 计算机毕业设计
    取,系统界面在最后面。系统程序文件列表开题报告内容选题背景在当前全球新冠疫情的背景下,核酸检测已成为疫情防控的重要手段之一。关于核酸检测系统的研究,现有研究主要集中在大型医疗机构或政府卫生部门的信息系统整合与优化上,专门针对移动端、特别是基于Uniapp框架的核酸......
  • python+flask框架的基于SSM框架的微信小程序(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着移动互联网技术的飞速发展,微信小程序作为一种轻量级的应用形式,已经深入到人们的日常生活中。微信小程序以其无需下载、即用即走的特点......
  • python+flask框架的基于OA技术的办公文档归档系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景关于办公文档归档系统的研究,现有研究主要集中在传统档案管理系统以及大型企业级内容管理系统(ECM)方面,这些系统虽然功能强大,但往往复杂且成......
  • python+flask计算机毕业设计影视信息资源交易平台(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,影视产业迎来了前所未有的繁荣期。然而,影视信息资源的分布不均、交易渠道不畅等问题日益凸显,限制了影视作品的传......
  • python+flask计算机毕业设计在线小说系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的迅猛发展和数字阅读习惯的普及,在线小说系统作为一种新兴的文化传播平台,逐渐成为广大读者获取娱乐和知识的重要途径。近年......
  • Django drf jwt token认证前后端使用流程
    在DjangoRestFramework(DRF)中使用JWT(JSONWebToken)进行认证时,前后端需要配合工作。下面是DRF使用JWT认证的一个基本流程。后端部分安装必要的库:需要安装djangorestframework和djangorestframework-simplejwt两个库。后者是处理JWT的工具。pipin......
  • python+vue基于django/flask的在线投票管理系统java+nodejs-计算机毕业设计
    目录技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取技术栈和环境说明本系统以Python开发语言......
  • python+vue基于django/flask的美食分享推荐系统Java+nodejs-计算机毕业设计
    目录技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取技术栈和环境说明本系统以Python开发语言......
  • 微信小程序python flask django火锅店点餐订餐系统
    目录项目介绍具体实现截图技术介绍HBuilderX协同过滤算法java类核心代码部分展示其他springboot项目推荐详细视频演示源码获取项目介绍火锅店点餐系统,主要包括管理员与用户二个权限角色,对于用户角色不同,所使用的功能模块相应不同。本文从管理员、用户的功能要求出发......
  • git与github的授权认证
    一、进行本地git信息配置gitconfig--globaluser.usernamexxxxxgitconfig--globaluser.emailxxxxx@[email protected]#本地生成私钥和密钥信息生成之后,会在本地的C:\Users\用户名/.ssh/id_rsa和C:\Users\用户名/.ssh/id_rsa.pub二、进......