密码、信用卡信息、个人识别号码(PIN)——这些都是用于授权和认证的关键资产。这意味着它们需要受到未经授权的用户的保护。
作为开发者,我们的任务是保护这些敏感信息,并且在我们的应用程序中实施强大的安全措施非常重要。
现在,有许多认证机制可用于保护数据,如OAuth、OpenID Connect和JSON Web Tokens(JWTs)。
在本文中,我将向您展示如何通过在Flask应用程序中集成基于JWT的身份验证来使用JWTs来保护API中的信息。
以下是本文的内容:
- 什么是JSON Web Token?
- JWTs如何工作?
- 如何使用JSON Web Tokens来认证Flask应用程序
- 安装依赖项
- 创建数据库和用户模型
- 配置应用程序以进行JWT身份验证
- 创建受保护的路由
- 创建登录功能
- 结论
(本文视频讲解:java567.com)
先决条件
要按照本教程进行操作,您需要:
- 理解HTTP方法
- 理解如何在Flask中创建API
- VS Code(或其他类似的)编辑器
- 一个终端
什么是JSON Web Token?
JSON Web Tokens,简称JWTs,是一种用于在客户端和服务器之间安全传输信息的认证机制,使用JSON格式。
这些信息可以被验证和信任,因为它使用HMAC算法或使用RSA或ECDSA的公钥/私钥对进行数字签名。
令牌被编码为三部分,每部分由一个句点分隔,如下所示:
Header.Payload.Signature
- **Header:**这定义了令牌的类型(JWT)和使用的签名算法。
- **Payload:**这承载着用户特定的数据,如用户ID、用户名、角色和您想要包含的任何其他声明。此有效载荷被Base64编码以获得最大的安全性。
- **Signature:**这是头部、有效载荷和服务器的秘密密钥的散列组合。它确保了令牌的完整性,并且任何对令牌的修改都将被检测到。
JWTs如何工作?
要理解JWTs如何工作,您需要知道令牌的作用。JWTs不是为了隐藏数据,而是为了确保正在发送的数据得到了认证。这就是为什么JWT被签名和编码,而不是加密。
JWT充当了从客户端向服务器传输数据的无状态手段。这意味着它不会在浏览器中存储任何会话对象,因此浏览器不会在请求之间保持会话状态。
而是,JWT使用一个令牌,在每次发出请求时都以请求头的形式发送。此令牌确认发送的令牌经过了认证,并允许访问该请求。
让我们看看这是如何发生的:
- 用户尝试登录并发送用户名和密码以由服务器验证。
- 验证函数执行检查,看看数据库中是否有匹配项。
- 一旦用户使用其信息(有效载荷)成功认证(登录),服务器就会生成一个JWT,并使用秘密密钥对其进行签名。
- 生成的JWT随每个请求头一起作为承载令牌发送,以检查用户是否被授权进行该请求。
如何在Flask应用程序中使用JSON Web Tokens进行身份验证
为了演示如何在Flask中实现JWT身份验证,我们将创建一个简单的应用程序,该应用程序使用JWT来处理登录功能和访问受保护的路由。
1. 安装依赖项
运行以下命令以安装我们需要的依赖项:
pip install flask flask-bcrypt Flask-JWT-Extended
接下来,请确保您导入依赖项并使用以下代码初始化您的Flask应用程序:
from flask import Flask, jsonify, session, request, redirect, url_for
from flask_jwt_extended import JWTManager, create_access_token, jwt_required, get_jwt_identity, get_jwt
app = Flask(__name__)
////在这里编写主要代码
if __name__ == "__main__":
with app.app_context():