狂自私

导航

JWT认证

JWT(JSON Web Token)认证是一种用于客户端和服务器之间传递安全信息的机制。它常用于用户身份验证,特别是在现代的 Web 应用程序和 API 中。下面是 JWT 认证的基本概念、工作流程以及在 Django 中的实现示例。

JWT 概述

JWT 是一个包含了 JSON 对象的字符串,可以安全地在各方之间传递信息。它由三部分组成:

  1. 头部(Header): 通常包含令牌类型(即 JWT)和所使用的签名算法(如 HMAC SHA256 或 RSA)。
  2. 载荷(Payload): 包含声明(claims),可以是关于用户的信息(如用户 ID、角色等)以及其他自定义数据。
  3. 签名(Signature): 用于确保令牌未被篡改。通过将编码后的头部和载荷与密钥一起进行签名得到。

JWT 的结构如下:

header.payload.signature

工作流程

  1. 用户登录: 用户通过提供凭据(如用户名和密码)进行登录。
  2. 生成 JWT: 如果凭据有效,服务器会生成一个 JWT,并将其返回给客户端。
  3. 存储 JWT: 客户端通常会将 JWT 存储在本地存储或 Cookie 中。
  4. 发送请求: 客户端在后续请求中将 JWT 作为 Authorization 头的一部分发送给服务器。
  5. 验证 JWT: 服务器接收到请求后,会验证 JWT 的有效性。如果有效,则允许访问受保护的资源。
  6. 根据需要更新或撤销: 服务器可以选择在 JWT 到期后要求用户重新登录,或者在某些情况下撤销 JWT。

Django 中的 JWT 认证实现

在 Django 中,可以使用 djangorestframework-simplejwt 库实现 JWT 认证。以下是基本步骤:

1. 安装库

pip install djangorestframework-simplejwt

2. 更新 settings.py

settings.py 中添加 rest_frameworkrest_framework_simplejwt

INSTALLED_APPS = [
    ...
    'rest_framework',
    'rest_framework_simplejwt',
]

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ),
}

3. 配置 URL 路由

urls.py 中添加 JWT 相关的路由:

from django.urls import path
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView

urlpatterns = [
    ...
    path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
]

4. 获取和使用 JWT

  • 获取 Token: 发送 POST 请求到 /api/token/,并在请求体中提供用户名和密码。
curl -X POST http://localhost:8000/api/token/ -d "username=<your_username>&password=<your_password>"

成功后,会收到一个响应,其中包含 accessrefresh token。

  • 使用 Token: 在后续请求中,将 access token 作为 Authorization 头的一部分发送。
curl -H "Authorization: Bearer <your_access_token>" http://localhost:8000/api/protected/

5. 刷新 Token

使用刷新 token 来获取新的访问 token:

curl -X POST http://localhost:8000/api/token/refresh/ -d "refresh=<your_refresh_token>"

总结

JWT 认证为无状态认证提供了简单而安全的解决方案,适用于现代 Web 应用程序和 API。通过在 Django 中使用 djangorestframework-simplejwt,可以轻松地实现 JWT 认证并管理用户会话。

posted on 2024-09-12 14:04  狂自私  阅读(14)  评论(0编辑  收藏  举报