JWT

  (JSON Web Token)JWT,本质是一个token。算法

  • 是一种紧凑的URL安全方法,用于在网络通讯的双方之间传递。
  • 通常放在HTTP的headers 参数里面的authorization里面,值的前面加Bearer关键字和空格。
  • 主要用于身份认证和信息交换。
  • 由三部分组成: 第一部分咱们称它为头部(header),第二部分咱们称其为载荷(payload,相似于飞机上承载的物品),第三部分是签证(signature)。

header

jwt的头部承载两部分信息:安全

  • 声明类型,这里是jwt
  • 声明加密的算法 一般直接使用 HMAC SHA256

 

playload

载荷就是存放有效信息的地方。这个名字像是特指飞机上承载的货品,这些有效信息包含三个部分服务器

  • 标准中注册的声明
  • 公共的声明
  • 私有的声明

标准中注册的声明 (建议但不强制使用) :cookie

  • iss: jwt签发者
  • sub: jwt所面向的用户
  • aud: 接收jwt的一方
  • exp: jwt的过时时间,这个过时时间必需要大于签发时间
  • nbf: 定义在什么时间以前,该jwt都是不可用的.
  • iat: jwt的签发时间
  • jti: jwt的惟一身份标识,主要用来做为一次性token,从而回避重放攻击。

公共的声明
公共的声明能够添加任何的信息,通常添加用户的相关信息或其余业务须要的必要信息.但不建议添加敏感信息,由于该部分在客户端可解密.网络

私有的声明
私有声明是提供者和消费者所共同定义的声明,通常不建议存放敏感信息,由于base64是对称解密的,意味着该部分信息能够归类为明文信息。session

signature

jwt的第三部分是一个签证信息,这个签证信息由三部分组成:网站

  • header (base64后的)
  • payload (base64后的)
  • secret

这个部分须要base64加密后的header和base64加密后的payload使用.链接组成的字符串,而后经过header中声明的加密方式进行加盐secret组合加密,而后就构成了jwt的第三部分。编码

 
流程:

     1. 用户导航到登陆页,输入用户名和密码,进行登陆
     2. 服务器对登陆用户进行认证,若是认证经过,根据用户的信息和JWT的生成规则生成JWT Token
     3. 服务器将该Token字符串返回
     4. 客户端获得Token信息,将Token存储在localStorage、sessionStorage或cookie等存储形式中。
     5. 当用户请求服务器API时,在请求的Header中加入 Authorization:Token。
     6. 服务端对此Token进行校验,若是合法就解析其中内容,根据其拥有的权限和本身的业务逻辑给出响应结果,若是不经过,返回HTTP 401。
     7. 用户进入系统,得到请求资源加密

 

      JWT自己的实现很是简单,虽然很高效的完成了用户认证,但网站的安全性问题是一个很是重要且关键的问题,经过上面的JWT生成过程咱们能够很清楚的知道,JWT自己没有作加密处理,都是经过Base64进行编码后方便经过HTTP传输而已,Header和Payload信息都是能够经过Base64解码进行查看的。为保证用户密、密码验证过程的安全性,敏感信息须要在网络中传输,Token信息也会在Request请求信息中看到,所以,这个过程建议将网站进行SSL加密传输,采用HTTPS协议,以确保通道的安全性。在Payload中尽可能少带敏感性信息,只带ID等无关网站安全的信息。spa

相关文章
相关标签/搜索