zoukankan      html  css  js  c++  java
  • JWT认证-插件准备

    优点:

    1) 服务器不要存储token,token交给每一个客户端自己存储,服务器压力小
    2)服务器存储的是 签发和校验token 两段算法,签发认证的效率高
    3)算法完成各集群服务器同步成本低,路由项目完成集群部署(适应高并发)

    格式:

    1) jwt token采用三段式:头部.载荷.签名
    2)每一部分都是一个json字典加密形参的字符串
    3)头部和载荷采用的是base64可逆加密(前台后台都可以解密)
    4)签名采用hash256不可逆加密(后台校验采用碰撞校验)
    5)各部分字典的内容:
    头部:基础信息 - 公司信息、项目组信息、可逆加密采用的算法
    载荷:有用但非私密的信息 - 用户可公开信息、过期时间
    签名:头部+载荷+秘钥 不可逆加密后的结果
    注:服务器jwt签名加密秘钥一定不能泄露

    签发token:固定的头部信息加密.当前的登陆用户与过期时间加密.头部+载荷+秘钥生成不可逆加密
    校验token:头部可校验也可以不校验,载荷校验出用户与过期时间,头部+载荷+秘钥完成碰撞检测校验token是否被篡改

    一、drf-jwt插件

    安装:

    >: pip3 install djangorestframework-jwt

    1)登陆-签发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),
    ]

    2)

    认证 - 校验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" 格式的认证字符串
  • 相关阅读:
    Thinking in Java Reading Note(9.接口)
    Thinking in java Reading Note(8.多态)
    Thinking in Java Reading Note(7.复用类)
    SQL必知必会
    Thinking in Java Reading Note(5.初始化与清理)
    Thinking in Java Reading Note(2.一切都是对象)
    鸟哥的Linux私房菜笔记(1.基础)
    Thinking in Java Reading Note(1.对象导论)
    CoreJava2 Reading Note(2:I/O)
    CoreJava2 Reading Note(1:Stream)
  • 原文地址:https://www.cnblogs.com/xiaowangba9494/p/11722930.html
Copyright © 2011-2022 走看看