drf中jwt的使用和原理
时间: 2024-06-17 15:07:11 浏览: 162
drf的JWT认证.doc
Django Rest Framework(DRF)是一种基于 Django 的 Web 应用程序开发框架,它提供了许多工具和库,使得开发 Web API 更加容易。JWT 是一种基于 JSON 的 Web Token,它用于在网络应用程序和服务器之间传递声明以使身份验证和授权更加安全。在 DRF 中使用 JWT 可以使得 API 更加安全。
JWT 由三个部分组成:头部、载荷和签名。头部通常包含算法和令牌类型的信息,载荷通常包含用户标识信息和令牌的过期时间,签名则是根据头部、载荷和密钥生成的。
DRF 支持 JWT 验证,可以使用第三方库 djangorestframework-jwt 来实现。实现方式如下:
1. 安装 djangorestframework-jwt
```
pip install djangorestframework-jwt
```
2. 添加 JWT 相关配置到 settings.py 中
```
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
],
}
JWT_AUTH = {
'JWT_SECRET_KEY': SECRET_KEY,
'JWT_ALGORITHM': 'HS256',
'JWT_VERIFY_EXPIRATION': True,
'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7),
'JWT_ALLOW_REFRESH': True,
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=30),
}
```
3. 在 urls.py 中添加 JWT 相关路由
```
from rest_framework_jwt.views import obtain_jwt_token, refresh_jwt_token, verify_jwt_token
urlpatterns = [
url(r'^api-token-auth/', obtain_jwt_token),
url(r'^api-token-refresh/', refresh_jwt_token),
url(r'^api-token-verify/', verify_jwt_token),
]
```
4. 在需要验证的视图中添加 @jwt_authentication_classes 装饰器
```
from rest_framework.decorators import api_view, permission_classes, jwt_authentication_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
@api_view(['GET'])
@permission_classes([IsAuthenticated])
@jwt_authentication_classes
def my_view(request):
content = {'message': 'Hello, World!'}
return Response(content)
```
以上是 DRF 中使用 JWT 的简单介绍,JWT 的原理是将用户标识信息和过期时间等信息进行编码,生成一个安全的 token,并将其传递给客户端。客户端在后续的请求中携带这个 token,在服务端进行验证。
阅读全文