惠州网站设计公司,wordpress后台入口,战略策划,网站建设咨询话术文章目录 JWT简介在Django中使用JWT1. 安装2. 配置3. 添加认证接口 客户端使用JWT1. 获取新token2. 调用API3. 刷新token 同步发布在个人站点#xff1a;https://panzhixiang.cn
JWT简介
JWT(JSON Web Token)是一种流行的跨域认证解决方案。它可以在令牌中安全地传输用户身份… 文章目录 JWT简介在Django中使用JWT1. 安装2. 配置3. 添加认证接口 客户端使用JWT1. 获取新token2. 调用API3. 刷新token 同步发布在个人站点https://panzhixiang.cn
JWT简介
JWT(JSON Web Token)是一种流行的跨域认证解决方案。它可以在令牌中安全地传输用户身份信息,实现无状态认证机制。
优点:
跨域认证,适用于分布式微服务减少数据库查询,优化性能更好的托管和扩展性
结构:
header.payload.signatureheader 中描述签名算法等元数据payload 中包含自定义用户数据,如用户名、角色等signature 通过头和载荷以及密钥签名,保证完整和可验证
这一部分具体内容可以参考https://www.bilibili.com/video/BV1Sz4y1o7E8 我以前推荐过这个教程。
通过这种方式,JWT可以将用户信息安全地在客户端和服务端传递。
在Django中使用JWT
JWT在Django有多种第三方包可以实现我这里选择使用比较常用的simplejwt.
1. 安装
pip install djangorestframework_simplejwt2. 配置
在settings.py中添加以下内容
INSTALLED_APPS [
# ...
rest_framework,
rest_framework_simplejwt,
# ...
]REST_FRAMEWORK {DEFAULT_AUTHENTICATION_CLASSES: [rest_framework_simplejwt.authentication.JWTAuthentication,]
}SIMPLE_JWT {ACCESS_TOKEN_LIFETIME: timedelta(minutes30),REFRESH_TOKEN_LIFETIME: timedelta(days1),
}注意 这里还需要配置REST_FRAMEWORK本身的认证相关的配置
3. 添加认证接口
我们需要为获取tokens的视图配置URLs。这些视图已经被 djangorestframework_simplejwt 提供了我们只需将其添加到urls.py文件即可
from django.urls import path
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshViewurlpatterns [# ...path(api/token/, TokenObtainPairView.as_view(), nametoken_obtain_pair),path(api/token/refresh/, TokenRefreshView.as_view(), nametoken_refresh),# ...
]客户端使用JWT
1. 获取新token
发送用户名密码,获取access和refresh token:
import requests
url /api/token/
data {username: user1, password: secure-password}
response requests.post(url, datadata)
access_token response.json()[access]
refresh_token response.json()[refresh]保存token以供后续使用。
2. 调用API
在请求头中提供jwt token:
headers {Authorization: fBearer {access_token}}response requests.get(/api/user/, headersheaders)3. 刷新token
access token过期后,使用refresh token获取新的access token:
url /api/token/refresh/
data {refresh: refresh_token}response requests.post(url, datadata)
new_access_token response.json()[access]重复步骤2,3即可使用新的token调用API。
至此,我们了解了如何在Django REST框架中集成JWT认证,实现基于token的API接口访问控制。JWT可以提供更强大的用户认证方案。