JWT验证

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

内容简介: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/


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

查看所有标签

猜你喜欢:

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

注意力经济: 如何把大众的注意力变成生意

注意力经济: 如何把大众的注意力变成生意

吴修铭 / 中信出版集团股份有限公司 / 2018-4-1 / 69

编辑推荐 这本书由万维钢作序,并在《得到》日课中多次推荐!中文版未上市之前,中文前沿媒体就在力推这本书!关于注意力争夺战的历史和现在,作者给了权威的梳理和定位! 百年来,在争夺注意力的战场上,媒体、广告、商人、企业和大众成为博弈的主角。商人是如何在注意力争夺战中获利的?媒体是如何在改变报道形式的?广告是如何进化的?以及,营销是如何变得随处可见、无孔不入的呢?这本书讲述了令商人或企业从吸......一起来看看 《注意力经济: 如何把大众的注意力变成生意》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

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

RGB CMYK 互转工具