jwt使用配置:

settings文件中添加:

  1. REST_FRAMEWORK = {
  2. # 异常处理 自定义的异常处理类
  3. 'EXCEPTION_HANDLER': 'drf_meiduo.utils.exceptions.exception_handler',
  4.  
  5. 'DEFAULT_AUTHENTICATION_CLASSES': (
  6. # 引入JWT认证机制
  7. 'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
  8. 'rest_framework.authentication.SessionAuthentication',
  9. 'rest_framework.authentication.BasicAuthentication',
  10. ),
  11. }
  12.  
  13. JWT_AUTH = {
  14. #设置jwt的有效时间
  15. 'JWT_EXPIRATION_DELTA': datetime.timedelta(days=),
  16. }
  1. import logging
  2.  
  3. from rest_framework.views import exception_handler as drf_exception_handler
  4. from rest_framework.response import Response
  5. from rest_framework import status
  6.  
  7. from django.db import DatabaseError
  8. from redis.exceptions import RedisError
  9.  
  10. # 获取在配置文件中定义的logger,用来记录日志
  11. logger = logging.getLogger('django')
  12.  
  13. def exception_handler(exc, context):
  14. """
  15. 自定义异常处理
  16. :param exc: 异常
  17. :param context: 抛出异常的上下文
  18. :return: Response响应对象
  19. """
  20. # 调用drf框架原生的异常处理方法
  21. response = drf_exception_handler(exc, context)
  22.  
  23. if response is None:
  24. # 获取异常视图对象
  25. view = context['view']
  26. if isinstance(exc, DatabaseError) or isinstance(exc, RedisError):
  27. # 数据库异常
  28. logger.error('[%s] %s' % (view, type(exc)))
  29. response = Response({'message': '服务器内部错误'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
  30.  
  31. return response

自定义异常处理类

示例代码:django-restframework已经封装好了。

  1. Django REST framework JWT提供了登录签发JWT的视图,可以直接使用
  2.  
  3. from rest_framework_jwt.views import obtain_jwt_token
  4.  
  5. urlpatterns = [
  6. url(r'^authorizations/$', obtain_jwt_token),
  7. ]
  8. 注:默认JWT扩展登录视图的返回值仅有token,我们还需在返回值中增加usernameuser_id
  9.  
  10. . 自定义JWT扩展登录视图响应数据函数
  11. )在users/utils.py 中,创建
  12.  
  13. def jwt_response_payload_handler(token, user=None, request=None):
  14. """
  15. 自定义jwt认证成功返回数据
  16. """
  17. return {
  18. 'token': token,
  19. 'user_id': user.id,
  20. 'username': user.username
  21. }
  22. )修改配置文件
  23.  
  24. # JWT扩展配置
  25. JWT_AUTH = {
  26. 'JWT_EXPIRATION_DELTA': datetime.timedelta(days=),
  27. 'JWT_RESPONSE_PAYLOAD_HANDLER': 'users.utils.jwt_response_payload_handler',
  28. }

1 ,session 认证机制:

  1. ,用户登录,传递用户名和密码给客户端
  2. ,服务器进行用户名和密码的校验,如果校验成功,将用户保存到session
  3. ,将sessionid通过cookie返回给客服端,客服端会保存sessionID
  4. ,客服端再次访问服务器,会携带cookiesessionID ,服务端就可以获取对应的session信息,然后对用户的身份进行校验

  session认证存在的问题:

  1,session 信息存放在服务器端,如果用户过多,就占用过多的服务器的存储空间

  2,session 依赖于cookie,如果cookie被截获,可能产生csrf跨站请求伪造

  3,在分布式网站应用中,如果session存储到服务器的内存,session共享会用问题

2 ,jwt 认证机制

jwt token 组成:

  字符串,由头部(header),载荷(payload)和签名(signatrue)3部分组成,用.隔开(点号)

 1,头部(header):存储的是token类型和签名加密的算法

    {‘token类型’,‘签名加密算法’}  对头部内容使用base64进行加密,生成的就是header

 2,载荷(payload):存储有效的数据和token的有效时间

    {"user_id": "用户id",

      "username": "用户名"

      "mobile": "15211111111"

      ...

      "exp": "token有效时间"}

   对载荷内容进行base64加密,生成的内容就是payload

  3,签名(signature):作用:防止jwt token 被伪造

  

jwt 使用注意点:

  • payload载荷不要存过于敏感数据

  • 服务器需要保存好签名加密密钥

  • 可以使用安全网络协议:https

jwt扩展使用:

​ 功能:生成jwt token和校验jwt token

jwt token的更多相关文章

  1. ASP.NET Core 实战:基于 Jwt Token 的权限控制全揭露

    一.前言 在涉及到后端项目的开发中,如何实现对于用户权限的管控是需要我们首先考虑的,在实际开发过程中,我们可能会运用一些已经成熟的解决方案帮助我们实现这一功能,而在 Grapefruit.VuCore ...

  2. 关于 IdentityServer4 中的 Jwt Token 与 Reference Token

    OpenID Connect(Core),OAuth 2.0(RFC 6749),JSON Web Token (JWT)(RFC 7519) 之间有着密不可分联系,对比了不同语言的实现,还是觉得 I ...

  3. 如何在启用JWT Token授权的.NET Core WebApi项目中下载文件

    背景 前几天,做项目的时候遇到一个文件下载的问题.当前系统是一个前后端分离的项目,前端是一个AngularJs项目, 后端是一个.NET Core WebApi项目.后端的Api项目使用了Jwt To ...

  4. 【ASP.NET Core快速入门】(十一)应用Jwtbearer Authentication、生成jwt token

    准备工作 用VSCode新建webapi项目JwtAuthSample,并打开所在文件夹项目 dotnet new webapi --name JwtAuthSample 编辑JwtAuthSampl ...

  5. Django JWT Token RestfulAPI用户认证

    一般情况下我们Django默认的用户系统是满足不了我们的需求的,那么我们会对他做一定的扩展 创建用户项目 python manage.py startapp users 添加项目apps INSTAL ...

  6. SpringSecurityOAuth使用JWT Token

    ⒈JWT? JWT(Json Web Token),是Json的一个开放的Token标准. 1,自包含,SpringSecurityOAuth的默认Token是UUID的一个随机的无意义的字符串,并不 ...

  7. 咏南中间件支持JWT TOKEN

    咏南中间件支持JWT TOKEN

  8. Spring Cloud OAuth2.0 微服务中配置 Jwt Token 签名/验证

    关于 Jwt Token 的签名与安全性前面已经做了几篇介绍,在 IdentityServer4 中定义了 Jwt Token 与 Reference Token 两种验证方式(https://www ...

  9. 菜鸟入门【ASP.NET Core】11:应用Jwtbearer Authentication、生成jwt token

    准备工作 用VSCode新建webapi项目JwtAuthSample,并打开所在文件夹项目 dotnet new webapi --name JwtAuthSample 编辑JwtAuthSampl ...

  10. JWT token心得

    token的组成 token串的生成流程. token在客户端与服务器端的交互流程 Token的优点和思考 参考代码:核心代码使用参考,不是全部代码 JWT token的组成 头部(Header),格 ...

随机推荐

  1. jQuery九大选择器和jQuery对ajax的支持

    一.jQuery九大选择器 1)基本选择器: <body> <div id="div1ID">div1</div> <div id=&qu ...

  2. WebGL简易教程(五):图形变换(模型、视图、投影变换)

    [toc] 1. 概述 通过之前的教程,对WebGL中可编程渲染管线的流程有了一定的认识.但是只有前面的知识还不足以绘制真正的三维场景,可以发现之前我们绘制的点.三角形的坐标都是[-1,1]之间,Z值 ...

  3. Java后台开发方向面试题集合

    内容会不断更新. 初衷是每次看面经肯定都会有一些一时反应不过来的问题,希望集中记录一下便于自己查看. 而答案部分谷歌就很好,当然有些问题可能需要多次谷歌. 对于一些记不住的答案,我也会持续写上一些. ...

  4. 快学Scala 第一课 (变量,类型,操作符)

    Scala 用val定义常量,用var定义变量. 常量重新赋值就会报错. 变量没有问题. 注意:我们不需要给出值或者变量的类型,scala初始化表达式会自己推断出来.当然我们也可以指定类型. 多个值和 ...

  5. 部署主从dns

    主机部署:yum安装DNS服务和依赖 [admin@haifly-bj-dns1 ~]$ sudo yum install bind-chroot启动named-chroot服务 [admin@hai ...

  6. 我眼中的如何成为一名合格的PHP高级开发工程师

    转眼间搞PHP已超过10年准确的说12年,混在帝都,也经历过大公司小公司,有个同行朋友问我,我就思考下,如何成为一名合格的PHP高级开发 所有的所有仅限综合知识,因为PHP其实内容也很多,有的人专门研 ...

  7. Docker容器启动失败 Failed to start Docker Application Container Engine的解决办法

    当编辑完daemon.json时,准备systemctl start docker.service启动docker时报以下错误: 网上查找的诸多方法都不行,后面看到一篇类似的文章:http://www ...

  8. 帝国CMS 6.5功能解密:网站安全防火墙使用说明

    有关帝国CMS新版防火墙介绍可以查看:http://bbs.phome.net/showthread-13-136169-0.html 本文为大家讲解如何使用网站防火墙:一.配置“网站防火墙”有下面两 ...

  9. XGBoost: 你不能不知的机器学习算法

    XGBoost作为一个非常常用的算法,我觉得很有必要了解一下它的来龙去脉,于是抽空找了一些资料,主要包括陈天奇大佬的论文以及演讲PPT,以及网络上的一些博客文章,今天在这里对这些知识点进行整理归纳,论 ...

  10. 实验吧之【因缺思汀的绕过】(group by with rollup的注入利用)

    打开页面,查看源代码,发现存在source.txt(http://ctf5.shiyanbar.com/web/pcat/source.txt),如下: <?php error_reportin ...