Token令牌

什么是Token?

用户调用服务器API,向服务器发送的一个可靠的验证信息,用于服务器判断是否为用户

 

为什么使用Token?

1、传统web验证方式是每次都发送用户名和密码给服务器进行验证,每次都需要发送用户名密码大大增加信息被截获的风险。

2、使用了Token之后,用户在第一次登陆之后服务器可以签发一个令牌,返回给客户端,客户端保存该令牌,在之后登陆中,通过发送令牌进行用户的验证登陆。

 

Token有何好处?

1、避免重复发送用户名和密码,提高安全性

2、有助于服务器验证请求者的身份,保证了API的访问权限。

 

目前流行的访问权限认证模式

JWT

该访问权限认证模式中的Token,数据格式为Json形式,以Hash算法生成一个字符串,全称为Json Web Token

 

Token的组成

1、Header

头部规定了访问权限认证模式和加密方法

{
"typ" : "JWT",    (typ:类型)
"alg" : "HS256" (alg:算法,HS256表示哈希算法的mac值。SHA256/HmacSHA256,SHA256表示直接加密,HmacSHA256表示用秘钥进行加密。SHA(Secure) Hash Algorithm ,安全散列算法)
HMAC(Hash Message Authentication  Code,散列消息鉴别码))
}

2、content

内容中包含一些用户的个人信息,下面是一些标准字段

iss:Issuer,发行者
sub:Subject,主题
aud:Audience,观众
exp:Expiration time,过期时间
nbf:Not before
iat:Issued at,发行时间
jti:JWT ID
{
 "iss": "ninghao.net",
 "exp": "1438955445",
 "name": "wanghao",
 "admin": true
}
//base64编码结果
eyJpc3MiOiJuaW5naGFvLm5ldCIsImV4cCI6IjE0Mzg5NTU0NDUiLCJuYW1lIjoid2FuZ2hhbyIsImFkbWluIjp0cnVlfQ
Signature​

3、sign

sign的加密包括两部分,第一部分是对base64编码的header.content字符串进行加密,第二部分是对密码进行加密,这里的Secret是一个密码,存储在服务器中。

var encodedString = base64UrlEncode(header) + "." + base64UrlEncode(payload); 
HMACSHA256(encodedString, 'secret');
//加密结果
SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc

综合

生成的Token令牌是header.content.sign

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJuaW5naGFvLm5ldCIsImV4cCI6IjE0Mzg5NTU0NDUiLCJuYW1lIjoid2FuZ2hhbyIsImFkbWluIjp0cnVlfQ.SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc

之后客户端就会收到这个Token令牌,客户端发送请求携带该令牌就会获取需要的资源

你可能感兴趣的:(Java)