jwt:JSON Web Token 的缩写
由三部分组成:Header(头部)、Payload(负载)、Signature(签名)。
因此,JWT通常如下所示:
xxxxx.yyyyy.zzzzz
1 Header(头部)
由令牌的类型(即JWT)和正在使用过的签名算法组成。如:
{
"alg": "HS256",
"typ": "JWT"
}
那么,这个JSON是Base64Url编码成JWT的第一部分。
2 Payload(负载)
Payload是令牌jwt的第二部分。包含的是请求体和其它一些数据。
载荷的属性有三类:
预定义(Registered) 公有(public) 私有(private)
2.1 预定义的载荷
{
"sub": "1",
"iss": "http://localhost:8000/auth/login",
"iat": 1451888119,
"exp": 1454516119,
"nbf": 1451888119,
"jti": "37c107e4609ddbcc9c096ea5ee76c667",
"aud": "dev"
}
这里面的前 7 个字段都是由官方所定义的,也就是预定义(Registered claims)的,并不都是必需的。
iss (issuer):签发人
sub (subject):主题
aud (audience):受众
exp (expiration time):过期时间
nbf (Not Before):生效时间,在此之前是无效的
iat (Issued At):签发时间
jti (JWT ID):编号
2.2 公有的载荷
在使用 JWT 时可以额外定义的载荷。为了避免冲突,应该使用 IANA JSON Web Token Registry 中定义好的,或者给额外载荷加上类似命名空间的唯一标识。
2.3 私有载荷
在信息交互的双方之间约定好的,既不是预定义载荷也不是公有载荷的一类载荷。这一类载荷可能会发生冲突,所以应该谨慎使用。
3 Signature(签名)
签名属于jwt的第三部分。主要是把头部的base64UrlEncode与负载的base64UrlEncode拼接起来,再进行HMACSHA256加密,加密结果再进行base64url加密,最终得到的结果作为签名部分。
加密过程如下:
base64url(
HMACSHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload),
your-256-bit-secret (秘钥加盐)
)
)
如果一个客户端带着jwt请求服务端,服务端要确保这个请求是合法并且没有被篡改的请求,那么服务端是需要一个规则来进行验证的。所以上述签名的加密过程就是服务端的使用的规则,加密结果再和jwt的第三部分进行匹配,确定是否相同,如果相同则为合法请求。如果不相等,则为非法请求。
非法者非法请求的时候,可以通过同样的规则来伪造一个jwt,但是客户端一般是不知道服务端的密钥的(盐),所以非法者几乎不能伪造出合法的请求。
JWT(JSON Web Token)是一种用于身份验证和授权的开放标准。它由头部、负载和签名三部分组成,常用于用户登录后生成并传递给客户端,用以在后续请求中携带,实现无状态的用户认证。
2万+

被折叠的 条评论
为什么被折叠?



