Token认证
步骤
1.settings.py
INSTALLED_APPS = [
...
'rest_framework.authtoken'
]
- 配置路由
from rest_framework.authtoken import views
urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'^api-token-auth/', views.obtain_auth_token)
]
class BookViewSet(ModelViewSet):
"""视图集"""
queryset = BookInfo.objects.all()
serializer_class = BookInfoModelSerializer
# 指定当前视图访问权限
# IsAuthenticated 只登陆用户才能访问此视图中的所有接口
# IsAuthenticatedOrReadOnly 认证用户可读可写,未认证用户只能读
permission_classes = [IsAuthenticated, ]
# permission_classes = [IsAuthenticatedOrReadOnly]
authentication_classes = [BasicAuthentication, TokenAuthentication]
详情参照: 相关内容
一.主要缺陷:
1.Token验证是放在一张表中,即authtoken_token中,key没有失效时间,永久有效,一旦泄露,后果不可想象,安全性极差。
2.不利于分布式部署或多个系统使用一套验证,authtoken_token是放在某台服务器上的,如果分布式部署,将失效,或多个系统用一套验证,将必须复制该表到相应服务器上,麻烦费力。
jwt
pip install djangorestframework-jwt;
支持版本: python3.6 django: 2.0
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
class BookViewSet(ModelViewSet):
"""视图集"""
queryset = BookInfo.objects.all()
serializer_class = BookInfoModelSerializer
# 指定当前视图访问权限
# IsAuthenticated 只登陆用户才能访问此视图中的所有接口
# IsAuthenticatedOrReadOnly 认证用户可读可写,未认证用户只能读
permission_classes = [IsAuthenticated, ]
# permission_classes = [IsAuthenticatedOrReadOnly]
authentication_classes = [BasicAuthentication, JSONWebTokenAuthentication]
路由
from rest_framework_jwt.views import obtain_jwt_token
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^api-token-auth/', obtain_jwt_token),
]
文档信息
- 本文作者:slience_me
- 本文链接:https://slienceme.xyz/2021/01/13/Token%E8%AE%A4%E8%AF%81/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)