如何使用Flask-JWT实现基于JSON Web Token的身份验证

1. 什么是JSON Web Token

JSON Web Token(JWT)是一个开放标准(RFC 7519),用于在不同系统之间安全地传输信息。它可以实现用户身份验证和授权。

JWT包含三部分,分别是头部、载荷和签名。头部包含了加密算法和类型等信息,载荷则存储了需要传输的信息,包括用户ID、角色、过期时间等等,签名则用来验证是否被篡改。

import jwt

# 生成一个JWT Token

payload = {'user_id': 123456, 'role': 'admin'}

jwt_token = jwt.encode(payload, 'secret_key', algorithm='HS256')

print(jwt_token)

2. 什么是Flask-JWT

Flask-JWT是一个针对Flask框架的扩展,它可以方便地为API提供基于JWT的身份验证。使用Flask-JWT,您可以轻松地在应用程序中实现JWT认证,并且可以使用装饰器和中间件来保护API的端点。

3. 安装Flask-JWT

在安装Flask-JWT之前需要先安装Flask。

pip install Flask

pip install Flask-JWT

4. 初始化Flask-JWT

在Flask应用程序中使用Flask-JWT之前,您需要初始化它。

from flask import Flask

from flask_jwt import JWT

app = Flask(__name__)

app.secret_key = 'my-secret-key'

def authenticate(username, password):

# 根据用户名/密码或其他用户凭证,查询数据库验证用户

user = db.get_user(username)

if user and user.check_password(password):

return user

def identity(payload):

# 在JWT Token中存储了用户信息,此处需要从Token中解析出用户信息

user_id = payload['identity']

user = db.get_user_by_id(user_id)

return user

jwt = JWT(app, authenticate, identity)

在上面的代码中,我们定义了一个authenticate函数和一个identity函数用于验证用户和解析JWT Token。JWT对象的构造函数需要传递这两个函数作为参数,并且还需要指定一个秘钥用于生成JWT Token。

5. 使用Flask-JWT保护API

一旦您完成了Flask-JWT的初始化,就可以使用它来保护您的APIEndpoint了。

from flask_jwt import jwt_required

@app.route('/api/protected')

@jwt_required()

def protected():

# 在此处处理API请求

return jsonify({'hello': 'world'})

在上面的代码中,我们使用一个装饰器来指定需要进行身份验证的API端点。这样任何未经验证的请求都将被拒绝,并返回一个HTTP错误代码。

6. Flask-JWT常用方法

6.1. 创建JWT Token

使用Flask-JWT可以轻松地创建和解析JWT Token。

from flask_jwt import jwt_encode

payload = {'user_id': 123456, 'exp': datetime.utcnow() + timedelta(days=30)}

jwt_token = jwt_encode(payload, app.secret_key)

在上面的示例中,我们定义了一个有效期为30天的JWT Token。

6.2. 解析JWT Token

使用JWT解析Token可以得到其中存储的用户信息。

from flask_jwt import jwt_decode

jwt_token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxMjM0NTYsImV4cCI6MTYyMzEyMTYxNH0.GFn5JSxwOhfxpqPZ9Wmv6jQbLh0zw4Qp3nPOldbPrws'

user_info = jwt_decode(jwt_token, app.secret_key)

以上是使用Flask-JWT实现基于JSON Web Token的身份验证的步骤。

后端开发标签