返回

Flask JWT实战指南:轻松实现token认证

后端

使用 Flask-JWT-Extended 轻松实现用户认证

简介

随着互联网的飞速发展,用户认证已成为现代 Web 应用程序不可或缺的一部分。JSON Web Token(JWT)凭借其紧凑性、安全性以及跨平台兼容性,已成为一种广泛采用的认证机制。Flask-JWT-Extended 是一个专门针对 Flask 框架设计的轻量级扩展,它提供了全面且易于使用的 JWT 集成功能。

集成 Flask-JWT-Extended

  1. 安装: 使用 pip 命令安装 Flask-JWT-Extended。

    pip install Flask-JWT-Extended
    
  2. 初始化: 在 Flask 应用程序中导入并初始化 Flask-JWT-Extended。

    from flask_jwt_extended import JWTManager
    
    app = Flask(__name__)
    app.config['JWT_SECRET_KEY'] = 'super-secret'  # 替换为您的密钥
    jwt = JWTManager(app)
    

创建 JWT

要生成 JWT,使用 create_access_token() 函数,并指定用户的身份。

from flask_jwt_extended import create_access_token

token = create_access_token(identity='username')

验证 JWT

通过 @jwt_required 装饰器保护端点,并在视图函数中使用 get_jwt_identity() 获取当前用户标识。

from flask_jwt_extended import jwt_required, get_jwt_identity

@app.route('/protected')
@jwt_required
def protected():
    current_user = get_jwt_identity()
    return jsonify({'msg': 'Hello, %s!' % current_user})

刷新 JWT

使用 @jwt_refresh_token_required 装饰器保护刷新端点,并在视图函数中使用 create_access_token() 生成新的访问令牌。

from flask_jwt_extended import jwt_refresh_token_required, get_jwt_identity

@app.route('/refresh')
@jwt_refresh_token_required
def refresh():
    current_user = get_jwt_identity()
    new_token = create_access_token(identity=current_user)
    return jsonify({'token': new_token})

撤销 JWT

使用 jwt_revoke_token() 函数撤销 JWT,根据其唯一的标识符(jti)。

from flask_jwt_extended import jwt_required, jwt_revoke_token

@app.route('/revoke')
@jwt_required
def revoke():
    jti = get_raw_jwt()['jti']
    jwt_revoke_token(jti)
    return jsonify({'msg': 'Token revoked'})

结论

Flask-JWT-Extended 提供了一个简单易用的平台,可将 JWT 集成到 Flask 应用程序中。它提供了一系列强大的功能,包括创建、验证、刷新和撤销 JWT,确保您的应用程序安全可靠。

常见问题解答

  1. 什么是 JWT?
    JWT 是一种紧凑型加密令牌,用于安全地表示和传输用户身份和其他信息。

  2. 为什么使用 JWT?
    JWT 提供了以下优势:安全、跨平台兼容、可自定义以及容易集成。

  3. Flask-JWT-Extended 有什么优势?
    Flask-JWT-Extended 专为 Flask 框架设计,提供了一整套易于使用的 JWT 功能。

  4. 如何自定义 JWT 负载?
    您可以使用 user_claims_loader 配置项或在 create_access_token() 函数中指定其他声明。

  5. 如何使用黑名单实现 JWT 撤销?
    Flask-JWT-Extended 支持黑名单,您可以将被撤销的 JWT 的 jti 添加到黑名单存储中。