前言
再移植一个Java项目的时候,遇到了jwt Token,于是就研究了一下
介绍
JWT是什么
json web token(JWT)是一个开放标准(rfc7519),它定义了一种紧凑的、自包含的方式,用于在各方之间以JSON对象安全地传输信息。它是以JSON形式作为Web应用中的令牌,用于在各方之间安全地将信息作为JSON对象传输。在数据传输过程中还可以完成数据加密、签名等相关处理。
http协议无状态的,所以需要sessionId或token的鉴权机制,jwt的token认证机制不需要在服务端再保留用户的认证信息或会话信息。这就意味着基于jwt认证机制的应用程序不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利,jwt更适用于分布式应用
jwt由三部分组成
分别为Header、Payload、Signature
Header
- 参数类型-jwt
- 签名的算法-hs256
最后经过Base64进行编码
Payload
- iss:Issuer,发行者
- sub:Subject,主题
- aud:Audience,观众
- exp:Expiration time,过期时间
- nbf:Not before
- iat:Issued at,发行时间
- jti:JWT ID
Signature
先是用 Base64 编码的 header 和 payload ,再用加密算法加密一下,加密的时候要放进去一个 Secret ,这个相当于是一个密码,这个密码秘密地存储在服务端。
总结
通俗来讲,就是将Header、Payload、Signature分别进行Base64编码,然后用[.]连接起来,进行解密就是先用[.]将Token分割为三份,分别进行Base64解码即可