Python Flask 实战:使用 JWT 进行身份验证 在现代 Web 应用程序中,安全性是非常重要的,而用户身份验证是安全性的重中之重。JSON Web Token (JWT) 是一种流行的身份验证标准,可以作为身份验证和授权的安全传输方式。在本文中,我们将使用 Python Flask 框架实现 JWT 身份验证。 1. 什么是 JWT JSON Web Token (JWT) 是一种开放标准(RFC 7519),用于在用户和服务器之间传递安全声明。JWT 是一种紧凑的、URL 安全的方式,用于将 JSON 对象作为安全令牌传输。JWT 由三部分组成,分别是头部、载荷和签名。 - 头部 头部包含两个部分,分别是令牌的类型(即 JWT)和使用的加密算法(例如 HMAC SHA256 或 RSA)。 - 载荷 载荷是 JWT 的主要内容,它包含了存储在令牌中的声明。声明是关于实体(通常是用户)和其他数据的声明。有三种类型的声明:注册声明、公共声明和私有声明。 - 签名 签名是将头部和载荷组合起来,然后使用私钥(用于对称加密)或公钥(用于非对称加密)加密的字符串。签名用于验证消息的完整性和发送者的身份。 2. 安装 Flask 在开始之前,需要安装 Flask。可以在命令行中输入以下命令来安装 Flask: ```python pip install Flask ``` 3. 基本的 Flask 应用程序 在开始使用 JWT 进行身份验证之前,我们需要先了解一些 Flask 的基础知识,以创建一个基本的 Flask 应用程序。在 Python 中,非常容易创建 Flask 应用程序,只需要几行代码就可以了。 ```python from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return 'Hello, World!' ``` 在上面的代码中,我们导入了 Flask 库,并创建了一个 Flask 应用程序实例。然后,我们定义了一个路由,当用户访问根路径(/)时,会返回一个 “Hello, World!” 的字符串。 现在,我们可以通过运行以下命令来启动 Flask 应用程序: ```python export FLASK_APP=app.py flask run ``` 在浏览器中打开 http://127.0.0.1:5000,你应该能看到 “Hello, World!” 的字符串。 4. 使用 Flask-JWT 进行身份验证 现在,我们来安装 Flask-JWT,它是一个用于在 Flask Web 应用程序中实现 JWT 的扩展。在命令行中输入以下命令来安装 Flask-JWT: ```python pip install Flask-JWT ``` 然后,我们需要在 Flask 应用程序中设置一些配置,包括 JWT 密钥、JWT 认证地址等。以下是一个示例配置: ```python import os from flask import Flask from flask_jwt import JWT, jwt_required, current_identity from werkzeug.security import safe_str_cmp app = Flask(__name__) app.config['SECRET_KEY'] = 'super-secret' app.config['JWT_AUTH_URL_RULE'] = '/login' app.config['JWT_EXPIRATION_DELTA'] = timedelta(seconds=1800) def authenticate(username, password): if username == 'john' and password == 'pass': return User(1, username, password) def identity(payload): user_id = payload['identity'] return User.query.get(user_id) jwt = JWT(app, authenticate, identity) @app.route('/protected') @jwt_required() def protected(): return '%s' % current_identity ``` 在上述代码中,我们定义了一个 `authenticate()` 函数和一个 `identity()` 函数,它们分别用于验证用户凭据和从 JWT 令牌中获得用户信息。我们还使用 `@jwt_required()` 装饰器来保护受保护的路由,以确保只有经过身份验证的用户才能访问它。 5. 使用 Postman 进行测试 现在,我们已经准备好进行测试了。在这里我们将使用 Postman 来测试我们的应用程序。在 Postman 中,我们需要使用 `POST` 请求,使用以下示例数据: ``` { "username": "john", "password": "pass" } ``` 当数据被发送时,服务器会返回一个包含 JWT 令牌的 JSON 响应。现在,我们可以使用此令牌来访问受保护的路由。 使用 `GET` 请求,访问 `http://localhost:5000/protected`,并将 JWT 令牌添加到请求头中。如果 JWT 令牌有效,则服务器将返回 `current_identity` 中包含的用户信息。 6. 结论 在本文中,我们学习了如何使用 Python Flask 和 Flask-JWT 扩展来实现 JWT 身份验证。JWT 是一种快速、简单且安全的身份验证方法,可以用于 Web 应用程序中。使用 Flask-JWT 扩展可以快速创建安全的 Web 应用程序,无需编写大量的身份验证代码。