zoukankan      html  css  js  c++  java
  • drf—— 响聊聊cookie session token的演变

    一、会话保持

    会话保持是指在负载均衡器上的一种机制,可以识别客户端与服务器之间交互过程的关连性,在作负载均衡的同时还保证一系列相关连的访问请求都会分配到一台机器上。
    用人话来表述就是:在一次会话过程中发起的多个请求都会落到同一台机器上。

    二、cookie session token的演变

    cookie:客户端浏览器上的键值对,缺陷是:数据不安全
    之后有了
    session:服务端的键值对(内存,数据库,redis,文件),客户端只放一个随机字符串,安全(即便是泄露,也只是单个人的随机字符串被泄露,别人的猜不出来),缺陷是:对服务端压力大
    之后有了
    token:分三段:头.荷载.签名
            -header(公司信息,加密方式。。。)
            -payload(荷载,真正有用的数据部分,放用户id,用户名字。。(是拼在token串中的,所以就放在客户端了,客户端发请求会携带过去,这样子像cookie当然不安全,
              所以有了signature))
    -signature(签名,为了安全,把头和荷载部分通过不可逆加密算法加密---》得到一个签名)
      

      比如token:
        head.{name:lili,age:18}.eseetsweasdca
        base64加码后变成:
        asdfasfd.asdfasdf.asdfasdfaeraew

    因为token框架都要用,所以网上开源出drf-jwt模块

    -更详细看演变:https://www.cnblogs.com/liuqingzheng/articles/9509779.html

    三、drf-jwt模块

    1.快速使用

    -快速使用:(默认使用的是auth的user表)
            -1 创建用户
            -2 在路由中配置path('login/', obtain_jwt_token),
            -3 在postman中测试,用户名密码输入刚刚创建的用户就可以生成token
            -4 让一个视图必须登录以后才能访问
                -authentication_classes = [JSONWebTokenAuthentication, ] #认证(此认证类即可的登录访问,又可不登录访问,所以要加权限)
                -permission_classes = [IsAuthenticated,]#权限
            -5 让一个视图可以登录后访问,也可以不登录访问
                -authentication_classes = [JSONWebTokenAuthentication, ]
            -6 用postman测试,在请求头中加入
                -key:Authorization  value:jwt+空格+token串

    2.自己写基于jwt的认证类(登录了能访问,不登录就不能访问)

    -自己写基于jwt的认证类(登录了能访问,不登录就不能访问)
        class JwtAuthentication(BaseJSONWebTokenAuthentication):
            def authenticate(self, request):
                #取出token token=request.GET.get('token')
                token=request.META.get('HTTP_AUTHORIZATION')
                try: 
                    # 验证token是否正确
                    payload = jwt_decode_handler(token)
                except jwt.ExpiredSignature:
                   raise AuthenticationFailed('过期了')
                except jwt.DecodeError:
                   raise AuthenticationFailed('解码错误')
                except jwt.InvalidTokenError:
                   raise AuthenticationFailed('不合法的token')
                   #也可以只写一个except Exception('token不合法') 
                user=self.authenticate_credentials(payload)
                return (user, token)
    -自定制认证类的使用方式:
        -全局使用
        -局部使用
    -更详细JWT请看:https://www.cnblogs.com/guojieying/p/13966264.html
  • 相关阅读:
    在Ubuntu下安装软件
    HIVE Thrift Server使用总结
    用Wubi来安装Ubuntu 12
    linux命令总结
    Linux Sed简介
    Linux批量重命名文件
    算法学习的轨迹(转)
    写入es速率优化
    走近Flex组件系列(三):按扭组件(Button,CheckBox,LinkBar,LinkButton,PopUpButton,RadioButton,ToggleButtonBar)
    走近Flex组件系列(二):简单实用的Alert组件
  • 原文地址:https://www.cnblogs.com/guojieying/p/13966285.html
Copyright © 2011-2022 走看看