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),格 ...
随机推荐
- MySQL 分页查询优化
有时在处理偏移量非常大的分页时候查询时,例如LIMIT 1000,10这样的查询,这时MySQL需要查询1010条记录然后只返回最后10条,前面1000条记录都被抛弃,这样的代价非常高.要优化这种查询 ...
- bootstrap具体知识点(2)
3.以移动设备为优先 <meta name=”viewport” content=”width=device-width,initial-scale=1,user-scalable=no”> ...
- 谷歌助力,快速实现 Java 应用容器化
原文地址:梁桂钊的博客 博客地址:http://blog.720ui.com 欢迎关注公众号:「服务端思维」.一群同频者,一起成长,一起精进,打破认知的局限性. Google 在 2018 年下旬开源 ...
- SpringBoot 连接kafka ssl 报 CertificateException: No subject alternative names present 异常解决
当使用较新版本SpringBoot时,对应的 kafka-client 版本也比较新,如果使用了 2.x 以上的 kafka-client ,并且配置了 kafka ssl 连接方式时,可能会报如下异 ...
- Java性能调优的9个实用方法
1.使用StringBuilder StingBuilder 应该是在我们的Java代码中默认使用的,应该避免使用 + 操作符. 一般来说,使用 StringBuilder 的效果要优于使用 + 操作 ...
- Flutter 的基本控件
文本控件 Text 支持两种类型的文本展示,一个是默认的展示单一样式文本 Text,另一个是支持多种混合样式的富文本 Text.rich. 单一样式文本 Text 单一样式文本 Text 的初始化,是 ...
- Java字段初始化规律
首先先附上一段代码:public class InitializeBlockDemo { public static void main(String[] args) { InitializeBloc ...
- 纯C语言写的按键驱动,将按键逻辑与按键处理事件分离~
button drive 杰杰自己写的一个按键驱动,支持单双击.连按.长按:采用回调处理按键事件(自定义消抖时间),使用只需3步,创建按键,按键事件与回调处理函数链接映射,周期检查按键. 源码地址:h ...
- Java中NIO及基础实现
NIO:同步非阻塞IO 来源:BIO是同步阻塞IO操作,当线程在处理任务时,另一方会阻塞着等待该线程的执行完毕,为了提高效率,,JDK1.4后,引入NIO来提升数据的通讯性能 NIO中采用Reacto ...
- LeetCode_20-Valid Parentheses
给定一个字符串,其中包含字符’(’,’)’,’[’,’]’,’{‘,’}’,左括号必须匹配右括号,一对匹配的括号不能单独出现单个左括号或者右括号.如:(()[])有效,[(])无效空字符串也算是有效的 ...