(JSON Web Token)JWT,本质是一个token。算法
jwt的头部承载两部分信息:安全
载荷就是存放有效信息的地方。这个名字像是特指飞机上承载的货品,这些有效信息包含三个部分服务器
标准中注册的声明 (建议但不强制使用) :cookie
公共的声明 :
公共的声明能够添加任何的信息,通常添加用户的相关信息或其余业务须要的必要信息.但不建议添加敏感信息,由于该部分在客户端可解密.网络
私有的声明 :
私有声明是提供者和消费者所共同定义的声明,通常不建议存放敏感信息,由于base64是对称解密的,意味着该部分信息能够归类为明文信息。session
jwt的第三部分是一个签证信息,这个签证信息由三部分组成:网站
这个部分须要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