We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
JWT (JSON Web Token) 是一个公开的标准(RFC 7519),其定义了一种紧凑且独立的方式,使双方可以用 JSON 格式安全地传输信息。使用数字签名使得传输的信息可以被校验和信任。JWT 可以使用一个 secret 签名(HMAC 算法),也可以使用公钥秘钥进行签名(RSA,ECDSA 等)。
JWT 通常用于以下几个场景:
压缩过的 JWT 由三个部分组成,以 . 连接:
.
因此 JWT 看起来会像是如下结构:
xxxxx.yyyyy.zzzzz
逐个拆解一下
Header 部分一般包含两个字段
示例:
{ "alg": "HS256", "typ": "JWT" }
将这串 JSON 经过 Base64 编码后,就得到了 Header 部分
Payload 部分是一些声明,一般包含对一个实体(例如用户)的描述与一些额外的信息。
声明有三种:
这部分声明是预定义的,在标准中推荐有但不强制。提供一系列有用的、用于信息交换的声明。
包括以下字段:
(claims 字段都只有三个字母,是为了保持紧凑)
这部分声明可以按使用者的意愿来定义,但是需要避免与其他字段的冲突,因此,这部分字段应该在 IANA JSON Web Token Registry 中有定义,或者应被定义为一个带有不冲突命名空间的 URI 。
这部分自定义的声明应是使用 JWT 的双方约定好的字段,并且不能是 registered 或者 public 中的声明。
Payload 示例:
{ "sub": "1234567890", "name": "John Doe", "admin": true }
将 Payload 部分经过 Base64 编码后,组成 JWT 的第二部分
注意:JWT 虽然可以防止篡改,但是其内容是对任何人可见的,不要将任何未加密的私密信息放入 JWT 中。
将编码过的 Header, Payload 和一个 secret ,经过 Header 中指定的算法进行签名,即可得到 Signature 部分
例如,如果使用 HMAC SHA256 算法,签名将这样生成:
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
签名用于验证信息在传输途中没有被篡改,并且如果是使用私钥进行签发,还可以验证签发者的身份。
把三段 Base64 编码过的内容组合起来,并用 . 连接,即可得到一串 JWT 。
一个简易的时序图:
客户端一般会将 JWT 附在 Authorization Header 中,使用 Bearer 模式,例如:
Authorization: Bearer <token>
使用这种方式传输 JWT ,可以跨域使用,因为不是使用 Cookie 。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
什么是 JWT
JWT (JSON Web Token) 是一个公开的标准(RFC 7519),其定义了一种紧凑且独立的方式,使双方可以用 JSON 格式安全地传输信息。使用数字签名使得传输的信息可以被校验和信任。JWT 可以使用一个 secret 签名(HMAC 算法),也可以使用公钥秘钥进行签名(RSA,ECDSA 等)。
JWT 的用途
JWT 通常用于以下几个场景:
JWT 的结构是什么样的
压缩过的 JWT 由三个部分组成,以
.
连接:因此 JWT 看起来会像是如下结构:
xxxxx.yyyyy.zzzzz
逐个拆解一下
Header
Header 部分一般包含两个字段
示例:
将这串 JSON 经过 Base64 编码后,就得到了 Header 部分
Payload
Payload 部分是一些声明,一般包含对一个实体(例如用户)的描述与一些额外的信息。
声明有三种:
Registered claims
这部分声明是预定义的,在标准中推荐有但不强制。提供一系列有用的、用于信息交换的声明。
包括以下字段:
(claims 字段都只有三个字母,是为了保持紧凑)
Public claims
这部分声明可以按使用者的意愿来定义,但是需要避免与其他字段的冲突,因此,这部分字段应该在 IANA JSON Web Token Registry 中有定义,或者应被定义为一个带有不冲突命名空间的 URI 。
Private claims
这部分自定义的声明应是使用 JWT 的双方约定好的字段,并且不能是 registered 或者 public 中的声明。
Payload 示例:
将 Payload 部分经过 Base64 编码后,组成 JWT 的第二部分
注意:JWT 虽然可以防止篡改,但是其内容是对任何人可见的,不要将任何未加密的私密信息放入 JWT 中。
Signature
将编码过的 Header, Payload 和一个 secret ,经过 Header 中指定的算法进行签名,即可得到 Signature 部分
例如,如果使用 HMAC SHA256 算法,签名将这样生成:
签名用于验证信息在传输途中没有被篡改,并且如果是使用私钥进行签发,还可以验证签发者的身份。
将三段内容组合
把三段 Base64 编码过的内容组合起来,并用
.
连接,即可得到一串 JWT 。JWT 工作原理
一个简易的时序图:
客户端一般会将 JWT 附在 Authorization Header 中,使用 Bearer 模式,例如:
使用这种方式传输 JWT ,可以跨域使用,因为不是使用 Cookie 。
JWT 特点
Reference
The text was updated successfully, but these errors were encountered: