jwt token
jwt使用配置:
settings文件中添加:
- REST_FRAMEWORK = {
- # 异常处理 自定义的异常处理类
- 'EXCEPTION_HANDLER': 'drf_meiduo.utils.exceptions.exception_handler',
- 'DEFAULT_AUTHENTICATION_CLASSES': (
- # 引入JWT认证机制
- 'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
- 'rest_framework.authentication.SessionAuthentication',
- 'rest_framework.authentication.BasicAuthentication',
- ),
- }
- JWT_AUTH = {
- #设置jwt的有效时间
- 'JWT_EXPIRATION_DELTA': datetime.timedelta(days=),
- }
- import logging
- from rest_framework.views import exception_handler as drf_exception_handler
- from rest_framework.response import Response
- from rest_framework import status
- from django.db import DatabaseError
- from redis.exceptions import RedisError
- # 获取在配置文件中定义的logger,用来记录日志
- logger = logging.getLogger('django')
- def exception_handler(exc, context):
- """
- 自定义异常处理
- :param exc: 异常
- :param context: 抛出异常的上下文
- :return: Response响应对象
- """
- # 调用drf框架原生的异常处理方法
- response = drf_exception_handler(exc, context)
- if response is None:
- # 获取异常视图对象
- view = context['view']
- if isinstance(exc, DatabaseError) or isinstance(exc, RedisError):
- # 数据库异常
- logger.error('[%s] %s' % (view, type(exc)))
- response = Response({'message': '服务器内部错误'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
- return response
自定义异常处理类
示例代码:django-restframework已经封装好了。
- Django REST framework JWT提供了登录签发JWT的视图,可以直接使用
- from rest_framework_jwt.views import obtain_jwt_token
- urlpatterns = [
- url(r'^authorizations/$', obtain_jwt_token),
- ]
- 注:默认JWT扩展登录视图的返回值仅有token,我们还需在返回值中增加username和user_id。
- . 自定义JWT扩展登录视图响应数据函数
- )在users/utils.py 中,创建
- def jwt_response_payload_handler(token, user=None, request=None):
- """
- 自定义jwt认证成功返回数据
- """
- return {
- 'token': token,
- 'user_id': user.id,
- 'username': user.username
- }
- )修改配置文件
- # JWT扩展配置
- JWT_AUTH = {
- 'JWT_EXPIRATION_DELTA': datetime.timedelta(days=),
- 'JWT_RESPONSE_PAYLOAD_HANDLER': 'users.utils.jwt_response_payload_handler',
- }
1 ,session 认证机制:
- ,用户登录,传递用户名和密码给客户端
- ,服务器进行用户名和密码的校验,如果校验成功,将用户保存到session
- ,将sessionid通过cookie返回给客服端,客服端会保存sessionID
- ,客服端再次访问服务器,会携带cookie:sessionID ,服务端就可以获取对应的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的更多相关文章
- ASP.NET Core 实战:基于 Jwt Token 的权限控制全揭露
一.前言 在涉及到后端项目的开发中,如何实现对于用户权限的管控是需要我们首先考虑的,在实际开发过程中,我们可能会运用一些已经成熟的解决方案帮助我们实现这一功能,而在 Grapefruit.VuCore ...
- 关于 IdentityServer4 中的 Jwt Token 与 Reference Token
OpenID Connect(Core),OAuth 2.0(RFC 6749),JSON Web Token (JWT)(RFC 7519) 之间有着密不可分联系,对比了不同语言的实现,还是觉得 I ...
- 如何在启用JWT Token授权的.NET Core WebApi项目中下载文件
背景 前几天,做项目的时候遇到一个文件下载的问题.当前系统是一个前后端分离的项目,前端是一个AngularJs项目, 后端是一个.NET Core WebApi项目.后端的Api项目使用了Jwt To ...
- 【ASP.NET Core快速入门】(十一)应用Jwtbearer Authentication、生成jwt token
准备工作 用VSCode新建webapi项目JwtAuthSample,并打开所在文件夹项目 dotnet new webapi --name JwtAuthSample 编辑JwtAuthSampl ...
- Django JWT Token RestfulAPI用户认证
一般情况下我们Django默认的用户系统是满足不了我们的需求的,那么我们会对他做一定的扩展 创建用户项目 python manage.py startapp users 添加项目apps INSTAL ...
- SpringSecurityOAuth使用JWT Token
⒈JWT? JWT(Json Web Token),是Json的一个开放的Token标准. 1,自包含,SpringSecurityOAuth的默认Token是UUID的一个随机的无意义的字符串,并不 ...
- 咏南中间件支持JWT TOKEN
咏南中间件支持JWT TOKEN
- Spring Cloud OAuth2.0 微服务中配置 Jwt Token 签名/验证
关于 Jwt Token 的签名与安全性前面已经做了几篇介绍,在 IdentityServer4 中定义了 Jwt Token 与 Reference Token 两种验证方式(https://www ...
- 菜鸟入门【ASP.NET Core】11:应用Jwtbearer Authentication、生成jwt token
准备工作 用VSCode新建webapi项目JwtAuthSample,并打开所在文件夹项目 dotnet new webapi --name JwtAuthSample 编辑JwtAuthSampl ...
- JWT token心得
token的组成 token串的生成流程. token在客户端与服务器端的交互流程 Token的优点和思考 参考代码:核心代码使用参考,不是全部代码 JWT token的组成 头部(Header),格 ...
随机推荐
- jQuery九大选择器和jQuery对ajax的支持
一.jQuery九大选择器 1)基本选择器: <body> <div id="div1ID">div1</div> <div id=&qu ...
- WebGL简易教程(五):图形变换(模型、视图、投影变换)
[toc] 1. 概述 通过之前的教程,对WebGL中可编程渲染管线的流程有了一定的认识.但是只有前面的知识还不足以绘制真正的三维场景,可以发现之前我们绘制的点.三角形的坐标都是[-1,1]之间,Z值 ...
- Java后台开发方向面试题集合
内容会不断更新. 初衷是每次看面经肯定都会有一些一时反应不过来的问题,希望集中记录一下便于自己查看. 而答案部分谷歌就很好,当然有些问题可能需要多次谷歌. 对于一些记不住的答案,我也会持续写上一些. ...
- 快学Scala 第一课 (变量,类型,操作符)
Scala 用val定义常量,用var定义变量. 常量重新赋值就会报错. 变量没有问题. 注意:我们不需要给出值或者变量的类型,scala初始化表达式会自己推断出来.当然我们也可以指定类型. 多个值和 ...
- 部署主从dns
主机部署:yum安装DNS服务和依赖 [admin@haifly-bj-dns1 ~]$ sudo yum install bind-chroot启动named-chroot服务 [admin@hai ...
- 我眼中的如何成为一名合格的PHP高级开发工程师
转眼间搞PHP已超过10年准确的说12年,混在帝都,也经历过大公司小公司,有个同行朋友问我,我就思考下,如何成为一名合格的PHP高级开发 所有的所有仅限综合知识,因为PHP其实内容也很多,有的人专门研 ...
- Docker容器启动失败 Failed to start Docker Application Container Engine的解决办法
当编辑完daemon.json时,准备systemctl start docker.service启动docker时报以下错误: 网上查找的诸多方法都不行,后面看到一篇类似的文章:http://www ...
- 帝国CMS 6.5功能解密:网站安全防火墙使用说明
有关帝国CMS新版防火墙介绍可以查看:http://bbs.phome.net/showthread-13-136169-0.html 本文为大家讲解如何使用网站防火墙:一.配置“网站防火墙”有下面两 ...
- XGBoost: 你不能不知的机器学习算法
XGBoost作为一个非常常用的算法,我觉得很有必要了解一下它的来龙去脉,于是抽空找了一些资料,主要包括陈天奇大佬的论文以及演讲PPT,以及网络上的一些博客文章,今天在这里对这些知识点进行整理归纳,论 ...
- 实验吧之【因缺思汀的绕过】(group by with rollup的注入利用)
打开页面,查看源代码,发现存在source.txt(http://ctf5.shiyanbar.com/web/pcat/source.txt),如下: <?php error_reportin ...