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

    JWT认证

    1.优点与格式

    优点

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

    格式

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

    2.drf-jwt插件安装使用

    安装

    # 相当于一个模块,只需要下载导入就可以使用,不需要注册,不和数据库打交道.
    pip install djangorestframework-jwt
    

    登录

    # 自动签发token,路由固定写法
    # ObtainJSONWebToken视图类就是通过username和password得到suer对象然后签发token
    from rest_framework_jwt.views import ObtainJSONWebToken,obtain_jwt_token
    
    urlpatterns = [
    	# url(r'^login/$', ObtainJSONWebToken.as_view()),
    	url(r'^login/$', obtain_jwt_token), # 和上面的路由等效,obtain_jwt_token内部代表的东西和上面是一样的
    ]
    # 这样就实现了登录.
    

    认证

    # 基于自动签发,校验token:
    # 局部配置drf-jwt的认证类JSONWebTokenAuthentication
    
    from rest_framework.view 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]  # 局部配置认证类
    	permission_classes = [IsAuthenticated] # 结合权限组件筛选掉游客
    	def get(self, request, *args, **kwargs):
    		return APIResponse(results={'username': request.user.username})
    

    路由与接口测试

    # 路由
    url(r'^user/detail/$', view.UserDetail.as_view()),
    
    # 接口: /api/user/detail/
    # 认证信息: 必须在请求头的 Authorization中携带  "jwt后台签发的token"  格式的认证字段串
    
  • 相关阅读:
    day01--计算机硬件基础笔记
    22 Jun 18 Django,ORM
    21 Jun 18 Django,ORM
    20 Jun 18 复习, mysql
    20 Jun 18 Django,ORM
    19 Jun 18 复习, 正则表达式
    19 Jun 18 Django
    15 Jun 18 复习, shutil模块
    15 Jun 18 Django
    14 Jun 18 复习, form表单
  • 原文地址:https://www.cnblogs.com/kangwy/p/11953924.html
Copyright © 2011-2022 走看看