JWT笔记

JWT是一个无状态登录的技术.所谓无状态,是指和传统的session技术相比,服务器端不需要存储用户的信息.在JWT技术中,agent向server请求一个Token.

这个Token由三部分组成,head, playload,signature.三个部分由"."隔开.下面分别解释这三个部分的作用.

1.head

head中主要存储了这个Token所采用的加密算法.

2.playload

playload中存储的是这个token的有效信息.例如某个用户User1想要向服务器请求某个资源.那么当他向服务器请求资源时,他所附加的token中必然会存储这个

用户的身份信息,这个身份信息就是存储在playload中的.

3.signature

signature是用来验证这个Token有效性的.下面会详细说明.

 

用一个例子来说明JWT的工作过程:

a.用户User1向服务器请求一个Token,其中包含了用户名User1, 过期时间,签发时间等信息.

b.服务器收到用户User1的请求后,首先用BaseURL64编码将用户请求中所包含的用户名,过期时间,签发时间等信息转化为一个字符串.

 注意这个字符串是没有加密的.BaseURL64编码只是一个简单的映射,你可以理解为他就是明文.

c.服务器根据指定的加密算法生成signature,例如:

  RSASHA256(base64UrlEncode(header) + "." + base64UrlEncode(playload), publicKey, privateKey)

 这里publicKey和privateKey都是服务端事先定义好的秘钥.服务器将得到的signature和head,playload拼接在一起返回给用户.

d.当用户想要访问某个资源的时候,它将从服务器哪里获得的Token附着在http请求的头部.

e.服务器端收到用户的请求后,将Token从http请求的头部取出,然后用秘钥对这个Token的signature进行解密.

如果解密的结果与playload的内容一致,那么这个token就是有效的.否则这个Token就是无效的.

 

也就是说,JWT中存储的信息是明文,任何人只要得到Token就可以获取里面的信息.但是恶意用户无法修改Token中所存储的信息.

服务器端会验证它所收到的Token信息是否遭到篡改.

Ref: https://jwt.io/

 

posted @ 2018-05-30 10:07  ElNinoT  阅读(216)  评论(0编辑  收藏  举报