JWT验证

栏目: 数据库 · 发布时间: 5年前

内容简介:JWT(Json Web Token):是目前最流行的跨域身份验证解决方案。此前我们使用的身份验证方式都是基于Session:

JWT(Json Web Token):是目前最流行的跨域身份验证解决方案。

此前我们使用的身份验证方式都是基于Session:

JWT验证

这种方式并没有什么不妥,但其实这里有三个缺点:

  1. Session一般存储在 redis 中,而redis数据保存在内存中,随着用户的增多,内存消耗太大。
  2. 扩展性不好,用户每次验证都需要请求session服务器,增大了负载均衡能力,应用扩展受限。
  3. 因为是基于cookie来进行用户识别的, cookie如果被截获,用户就会很容易受到跨站请求伪造的攻击。

所以,我们需要一种既能实现相同要求并且还要比session存储更有效的身份验证方式。

JWT验证

JWT通过一种加密的方式,将加密后的数据保存返回给用户本地进行保存,我们称为token数据。其数据由三部分组成:

1、header声明类型和加密的算法:

{
  'typ': 'JWT',    #固定值
  'alg': 'HS256'    #加密算法
}

2、payload负载

这是有效信息的存放地方,其分为三部分:标准中注册的声明、公共声明、私有声明(用户信息)

标准中的注册声明(有需要在使用,不强制使用):

iss: jwt签发者

sub: jwt所面向的用户

aud: 接收jwt的一方

exp: jwt的过期时间,这个过期时间必须要大于签发时间

nbf: 定义在什么时间之前,该jwt都是不可用的.

iat: jwt的签发时间

jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。

公共声明:公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息.

私有声明:

{
  "name": "jim",
  "id": "111111",
  "admin": true
}

3、signature签名

需要base64加密后的header和base64加密后的payload使用.连接组成的字符串,然后通过header中声明的加密方式进行加盐secret组合加密,然后就构成了jwt的第三部分。由于base64是对称加密算法,所以可以轻松解密:因此我们在负载部分不要将私密信息放置在里面,只需要把能验证唯一的标识信息添加就可以了。

有关base64,请参考: https://www.liaoxuefeng.com/w...

由于目前在学习DRF,所以我介绍一下怎样在DRF项目中使用JWT进行身份验证:

安装djangorestframework-jwt:

pip install djangorestframework-jwt

添加jwt认证类:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    ),
}

添加jwt路由用于生成token:

from rest_framework_jwt.views import obtain_jwt_token

urlpatterns = [
    url(r'^自己的路由/', obtain_jwt_token),
]

然后我们就可以通过自己添加的路由并通过post添加username和password来获取到token了,在进行访问页面的时候我们只需要在请求头中添加一个: Authorization: JWT <your_token> ,就可以得到验证了。

本文参考: https://lion1ou.win/2017/01/18/


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算机程序设计艺术:第4卷 第4册(双语版)

计算机程序设计艺术:第4卷 第4册(双语版)

Donald E.Knuth / 苏运霖 / 机械工业出版社 / 2007-4 / 42.00元

关于算法分析的这多卷论著已经长期被公认为经典计算机科学的定义性描述。迄今已出版的完整的三卷组成了程序设计理论和实践的惟一的珍贵源泉,无数读者都赞扬Knuth的著作对个人的深远影响。科学家们为他的分析的美丽和优雅所惊叹,而从事实践的程序员们已经成功地应用他的“菜谱式”的解到日常问题上,所有人都由于Knuth在书中所表现出的博学、清晰、精确和高度幽默而对他无比敬仰。   为开始后续各卷的写作并更......一起来看看 《计算机程序设计艺术:第4卷 第4册(双语版)》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具