zoukankan      html  css  js  c++  java
  • jwt认证

    认证规则图

    django不分离

    drf分类

    认证规则演变图

    数据库session认证:低效

    缓存认证:高效

    jwt认证:高效

    缓存认证:不易并发

    jwt认证:易并发

    JWT认证

    优点
    """
    1) 服务器不要存储token,token交给每一个客户端自己存储,服务器压力小
    2)服务器存储的是 签发和校验token 两段算法,签发认证的效率高
    3)算法完成各集群服务器同步成本低,路由项目完成集群部署(适应高并发)
    """
    
    格式
    """
    1) jwt token采用三段式:头部.载荷.签名
    2)每一部分都是一个json字典加密形参的字符串
    3)头部和载荷采用的是base64可逆加密(前台后台都可以解密)
    4)签名采用hash256不可逆加密(后台校验采用碰撞校验)
    5)各部分字典的内容:
    	头部:基础信息 - 公司信息、项目组信息、可逆加密采用的算法
    	载荷:有用但非私密的信息 - 用户可公开信息、过期时间
    	签名:头部+载荷+秘钥 不可逆加密后的结果
    	注:服务器jwt签名加密秘钥一定不能泄露
    	
    签发token:固定的头部信息加密.当前的登陆用户与过期时间加密.头部+载荷+秘钥生成不可逆加密
    校验token:头部可校验也可以不校验,载荷校验出用户与过期时间,头部+载荷+秘钥完成碰撞检测校验token是否被篡改
    """
    

    drf-jwt插件

    官网
    https://github.com/jpadilla/django-rest-framework-jwt
    
    安装
    >: pip3 install djangorestframework-jwt
    
    登录 - 签发token:api/urls.py
    # ObtainJSONWebToken视图类就是通过username和password得到user对象然后签发token
    from rest_framework_jwt.views import ObtainJSONWebToken, obtain_jwt_token
    urlpatterns = [
        # url(r'^jogin/$', ObtainJSONWebToken.as_view()),
        url(r'^jogin/$', obtain_jwt_token),
    ]
    
    认证 - 校验token:全局或局部配置drf-jwt的认证类 JSONWebTokenAuthentication
    from rest_framework.views import APIView
    from utils.response import APIResponse
    # 必须登录后才能访问 - 通过了认证权限组件
    from rest_framework.permissions import IsAuthenticated
    from rest_framework_jwt.authentication import JSONWebTokenAuthentication
    class UserDetail(APIView):
        authentication_classes = [JSONWebTokenAuthentication]  # jwt-token校验request.user
        permission_classes = [IsAuthenticated]  # 结合权限组件筛选掉游客
        def get(self, request, *args, **kwargs):
            return APIResponse(results={'username': request.user.username})
    
    路由与接口测试
    # 路由
    url(r'^user/detail/$', views.UserDetail.as_view()),
    
    # 接口:/api/user/detail/
    # 认证信息:必须在请求头的 Authorization 中携带 "jwt 后台签发的token" 格式的认证字符串
    
  • 相关阅读:
    Codeforces 787D. Legacy 线段树优化建图+最短路
    Codeforces 1051E. Vasya and Big Integers
    BZOJ3261 最大异或和
    BZOJ3531 SDOI2014 旅行
    洛谷P2468 SDOI 2010 粟粟的书架
    2018 ICPC 焦作网络赛 E.Jiu Yuan Wants to Eat
    HDU6280 From Tree to Graph
    HDU5985 Lucky Coins 概率dp
    (HDU)1334 -- Perfect Cubes (完美立方)
    (HDU)1330 -- Deck (覆盖物)
  • 原文地址:https://www.cnblogs.com/DcentMan/p/11722362.html
Copyright © 2011-2022 走看看