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
  • 相关阅读:
    Redis 事务相关的命令有哪几个?
    是否了解字典树?
    memcached 是如何做身份验证的?
    memcached 和服务器的 local cache(比如 PHP 的 APC、 mmap 文件等)相比,有什么优缺点?
    memcached 如何处理容错的?
    memcached 的多线程是什么?如何使用它们?
    memcached 的内存分配器是如何工作的?为什么不适用 malloc/free!?为何要使用 slabs?
    memcached 如何实现冗余机制?
    memcached 最大能存储多大的单个 item?
    memcached 能接受的 key 的最大长度是多少?
  • 原文地址:https://www.cnblogs.com/guojieying/p/13966285.html
Copyright © 2011-2022 走看看