-
[武汉|结业弟子]JAVA-李伟明0
基于token的鉴权机制类似于http协议也是无状态的,它不需要在服务端去保留用户的认证信息或者会话信息。这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利。
流程上是这样的:
- 1、用户使用用户名密码来请求服务器
- 2、服务器进行验证用户的信息
- 3、服务器通过验证发送给用户一个token
- 4、客户端存储token,并在每次请求时附送上这个token值
- 5、服务端验证token值,并返回数据
JWT是由三段信息构成的:第一部分我们称它为头部(header),第二部分我们称其为载荷(payload, 类似于飞机上承载的物品),第三部分是签证(signature).
头信息指定了该JWT使用的签名算法:
header = '{"alg":"HS256","typ":"JWT"}'
- 消息体包含了JWT的意图:
payload = '{"loggedInAs":"admin","iat":1422779638}'//iat表示令牌生成的时间
未签名的令牌由
base64url
编码的头信息和消息体拼接而成(使用”.”分隔),签名则通过私有的key计算而成:key = 'secretkey' unsignedToken = encodeBase64(header) + '.' + encodeBase64(payload) signature = HMAC-SHA256(key, unsignedToken)
最后在未签名的令牌尾部拼接上
base64url
编码的签名(同样使用”.”分隔)就是JWT了:token = encodeBase64(header) + '.' + encodeBase64(payload) + '.' + encodeBase64(signature) # token看起来像这样: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0
编辑于2018-07-06
- 去第 页