Web|Token认证

2021/01/13 Web 共 1359 字,约 4 分钟

Token认证

步骤

1.settings.py

INSTALLED_APPS = [
    ...
    'rest_framework.authtoken'
]
  1. 配置路由
from rest_framework.authtoken import views

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path(r'^api-token-auth/', views.obtain_auth_token)
]

Alt Text

class BookViewSet(ModelViewSet):
    """视图集"""
    queryset = BookInfo.objects.all()
    serializer_class = BookInfoModelSerializer

    # 指定当前视图访问权限
    # IsAuthenticated 只登陆用户才能访问此视图中的所有接口
    # IsAuthenticatedOrReadOnly 认证用户可读可写,未认证用户只能读
    permission_classes = [IsAuthenticated, ]
    # permission_classes = [IsAuthenticatedOrReadOnly]

    authentication_classes = [BasicAuthentication, TokenAuthentication]

Alt Text Alt Text 详情参照: 相关内容

一.主要缺陷:   

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),
]

Alt Text Alt Text

文档信息

Search

    Table of Contents