匠心精神 - 良心品质腾讯认可的专业机构-IT人的高薪实战学院

咨询电话:4000806560

Python Flask 实战:使用 JWT 进行身份验证

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 应用程序,无需编写大量的身份验证代码。