-
页面认证 Browsable API 页面认证
1,指定permission_classes
2,添加rest_framework.urls 路由 -
json web Toke认证
- 常见的认证机制
1,session 认证
2,Token 认证
- 常见的认证机制
-
Session认证
1,保持在服务端,增加服务器开销
2,分布架构中,难以保持session绘画同步
3,CSRF风险 -
Token 认证
1,保存在客户端
2,跨语言,跨平台
3,推展性强
4,鉴权性能高
JWT
- 安装第三方模块 rest_framework_jwt
- 设置获取Token的接口
1, 在user模块的urls中添加
from django.urls import path, include
from rest_framework_jwt.views import obtain_jwt_token
urlpatterns = [
path('login/', obtain_jwt_token),
]
2,在项目setting中设置
2.1 设置允许JWT认证
'DEFAULT_AUTHENTICATION_CLASSES': [
#默认首先token认证
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication'
],
2.2 设置路由
path('user/',include('user.urls'))
演示:
-
获取token
image.png -
获取数据
image.png
注意使用POSTMAN 需要修改默认的JWT_AUTH_HEADER_PREFIX
image.png
源码:
这个函数负责token返回,如果需要定制则重写这个函数
def jwt_response_payload_handler(token, user=None, request=None):
"""
Returns the response data for both the login and refresh views.
Override to return a custom response such as including the
serialized representation of the User.
Example:
def jwt_response_payload_handler(token, user=None, request=None):
return {
'token': token,
'user': UserSerializer(user, context={'request': request}).data
}
"""
return {
'token': token
}
在utile中重写,在setting中重新指定:
image.png
'JWT_RESPONSE_PAYLOAD_HANDLER': 'utils.jwt_handler.jwt_response_payload_handler',
JWT的组成
image.png-
第一部分 头:可以通过base64为解密,不会存放任何敏信息
image.png -
第三部分 : 通过秘钥加密
image.png
网友评论