- 摘要:令牌采用JWT格式,用户认证通过时会得到一个JWT令牌,JWT令牌中已经包括了用户相关的信息,客户端只需要携带JWT访问资源服务,资源服务会根据事先约定的算法自行完成令牌校验,从而获取用户信息。
一 什么是 JWT?
JSON Web Token(JWT)是一个开放的token行业标准。它定义了一个简单的、自包含协议的格式数据,用于在通信双方传递json对象,传递的信息经过数字签名可以被验证和信任。
JWT可以使用HMAC算法或使用RSA的(公钥/私钥)对来签名,防止token被篡改。
二 JWT令牌的优点
- JWT基于json,非常方便解析。
- 可以在令牌中自定义丰富的内容,易扩展。
- 通过非对称加密算法及数字签名技术,JWT防止篡改,安全性高。
- 资源服务使用JWT可不依赖认证服务器即可完成授权。
三 JWT令牌的缺点
- JWT令牌生成token的长度会根据json内容多少而变化,json内容越丰富则JWT令牌则越长,占用存储空间则越大。
四 JWT令牌的结构
JWT令牌由三部分组成,每部分中间使用点“.”分隔,不如:xxxxx.yyyyy.zzzzz
- 第一部分:Header
即头部包括令牌的类型(JWT)及使用的哈希算法(如:HMACSHA256、RSA)。
{
“alg”:“HS256”,
“typ”:“JWT”
}
将上边的内容使用Base64Url编码,得到一个字符串就是JWT令牌的第一部分。
- 第二部分:payload
第二部分是负载,内容也是一个json对象,它是存放有效信息的地方,它可以存放JWT提供的现成字段,比如:iss(签发者),exp(过期时间戳),sub(面向的用户)等,也可自定义字段。
此部分不建议存放敏感信息,因为此部分可以解码还原内容。
{
“username”:“kongc”,
“password”:“123456”,
“role”:“admin”
}
将上边的内容使用Base64Url编码,得到一个字符串就是JWT令牌的第二部分。
- 第三部分:Signature
指的是签名,此部分用于防止JWT内容被篡改。
这个部分使用Base64Url将前两部分进行编码,编码后使用点“.”连接组成字符串,最后使用Header中声明的签名算法进行签名。
HMACSHA256(
base64UrlEncode(header)+ “.” +
base64UrlEncode(payload),
secret
)