JWT认证
发布时间:2020-12-20 10:13:36 所属栏目:Python 来源:网络整理
导读:一、认证规则图 django不分离 ? ? ? drf分类 二、认证规则演变图 数据库session认证:低效 ? ? ? 缓存认证:高效 ? ? jwt认证:高效 缓存认证:不易并发 ? ? ? jwt认证:易并发 三、JWT认证 优点 """ 1) 服务器不要存储token,token交给每一个客户端自己存储
? ? ? ? ? ?
? ?
? ? ?
""" 1) 服务器不要存储token,token交给每一个客户端自己存储,服务器压力小 2)服务器存储的是 签发和校验token 两段算法,签发认证的效率高 3)算法完成各集群服务器同步成本低,路由项目完成集群部署(适应高并发) """ """ 1) jwt token采用三段式:头部.载荷.签名 2)每一部分都是一个json字典加密形参的字符串 3)头部和载荷采用的是base64可逆加密(前台后台都可以解密) 4)签名采用hash256不可逆加密(后台校验采用碰撞校验) 5)各部分字典的内容: 头部:基础信息 - 公司信息、项目组信息、可逆加密采用的算法 载荷:有用但非私密的信息 - 用户可公开信息、过期时间 签名:头部+载荷+秘钥 不可逆加密后的结果 注:服务器jwt签名加密秘钥一定不能泄露 签发token:固定的头部信息加密.当前的登陆用户与过期时间加密.头部+载荷+秘钥生成不可逆加密 校验token:头部可校验也可以不校验,载荷校验出用户与过期时间,头部+载荷+秘钥完成碰撞检测校验token是否被篡改 """ https://github.com/jpadilla/django-rest-framework-jwt >: pip3 install djangorestframework-jwt # 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),] 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" 格式的认证字符串 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |