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/


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

查看所有标签

猜你喜欢:

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

编程之法

编程之法

July / 人民邮电出版社 / 2015-9-1 / 49.00元

本书涉及面试、算法、机器学习三个主题。书中的每道编程题目都给出了多种思路、多种解法,不断优化、逐层递进。本书第1章至第6章分别阐述字符串、数组、树、查找、动态规划、海量数据处理等相关的编程面试题和算法,第7章介绍机器学习的两个算法—K近邻和SVM。此外,每一章都有“举一反三”和“习题”,以便读者及时运用所学的方法解决相似的问题,且在附录中收录了语言、链表、概率等其他题型。书中的每一道题都是面试的高......一起来看看 《编程之法》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

MD5 加密
MD5 加密

MD5 加密工具