JWT 学习笔记

来源:互联网 发布:ichart.js下载 编辑:程序博客网 时间:2024/06/02 04:33

为什么要使用jwt,让网络数据更加安全,以防其他一些人无意恶搞
降低了session验证的性能消耗。

JWT是 Auth0 提出的通过对JSON进行加密签名来实现授权验证的方案,编码之后的JWT看起来是这样的一串字符:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
由.分为三段,通过解码可以得到:

// 1. Headers// 包括类别(typ)、加密算法(alg);{  "alg": "HS256",  "typ": "JWT"}// 2. Claims// 包括需要传递的用户信息;{  "sub": "1234567890",  "name": "John Doe",  "admin": true}// 3. Signature// 根据alg算法与私有秘钥进行加密得到的签名字串;// 这一段是最重要的敏感信息,只能在服务端解密;HMACSHA256(      base64UrlEncode(header) + "." +    base64UrlEncode(payload),    SECREATE_KEY)

在使用过程中,服务端通过用户登录验证之后,将Header+Claim信息加密后得到第三段签名,然后将签名返回给客户端,在后续请求中,服务端只需要对用户请求中包含的JWT进行解码,即可验证是否可以授权用户获取相应信息.

使用JWT可以省去服务端读取Session的步骤,这样更符合RESTful的规范。但是对于客户端(或App端)来说,为 了保存用户授权信息,仍然需要通过Cookie或类似的机制进行本地保存。因此JWT是用来取代服务端的Session而非客户端Cookie的方案,当 然对于客户端本地存储,HTML5提供了Cookie之外更多的解决方案(localStorage/sessionStorage),究竟采用哪种存储 方式,其实从Js操作上来看没有本质上的差异,不同的选择更多是出于安全性的考虑。

0 0
原创粉丝点击