JWT 认证
JSON 网络令牌(JWT)是一种紧凑的声明表示格式,适用于空间受限的环境,如 HTTP 授权标头和 URI 查询参数。 声明表示为包含 "声明名称" 和 "声明值" 的 "名称/值" 对。
JWT 中的声明编码为 JSON 对象,该对象用作 JSON Web 签名 (JWS) 结构的有效内容,或用作 JSON Web 加密 (JWE) 结构的纯文本。 JWT 声明可以通过消息认证代码 (MAC) 进行数字签名或完整性保护,并且还可以对其进行加密。
JWT 概述
JWT 将一组声明表示为以 JWS 或 JWE 结构编码的 JSON 对象。 此 JSON 对象是 JWT 声明集。 JSON 对象由零个或多个 "名称/值" 对 (或成员) 组成,其中名称是字符串,值是任意 JSON 值。 这些成员是 JWT 表示的声明。 JWT 声明集中的成员名称为 "声明名称"。 相应的值称为 "声明值"。
JWT 表示为一系列 URL部分,以句点('.')字符分隔。 每个部分都包含一个 base64url-encoded值。 JWT 中的部件数取决于生成的 JWS (使用 JWS 压缩序列化) 或 JWE (使用 JWE 压缩序列化) 的表示。
JWT 的类型
JWT 主要有以下两种类型:
注: Sterling™ Order Management仅支持 JWS。
JWT 示例
典型的 JWS 格式为:<Base 64 URL 编码的 Header json>.<Base 64 URK 编码的 Payload json>.<Base 64 URL 编码的签名>
以下签名是通过使用 RS256 算法,用加密密钥对 Base 64 URL 编码的标头和有效载荷内容进行签名获得的。
Header
{
"alg": "RS256",
"typ": "JWT",
"kid": "a1"
}
Payload
{
"sub": "1234567890",
"name": "John Doe",
"admin": true,
"iat": 1516239022,
"exp": 1531762065
}下图是使用 RS256 专用密钥签名的 JWT 的样本 JWS 表示。
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImExIn0
.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMiwiZXhwIjoxNTMxNzYyMDY1fQ
.z4qfO0leZK2mYp_w-jFNidTx-Ri0PRMHLsOAG1Den7ZR4QntIJhU17U0afgoe5VzISXS6jW61ga3XEk39ey1G7a_-ARIVZLYN11fHDhsPuzN7PPkbT
5uWpHEUhVWRR8dxHqXmNiDaWjNhTnzHCBpfrRHj5pR_dzubbuE_uPuvDk如样本中所示, JWS 具有以下部分并以 "." 分隔。 字符。
- 头 =
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImExIn0 - 有效内容 =
G4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMiwiZXhwIjoxNTMxNzYyMDY1fQ - 签名 =
z4qfO0leZK2mYp_w-jFNidTx-Ri0PRMHLsOAG1Den7ZR4QntIJhU17U0afgoe5VzISXS6jW61ga3XEk39ey1G7a_-ARIVZLYN11fHDhsPuzN7PPkbT5uWpHEUhVWRR8dxHqXmNiDaWjNhTnzHCBpfrRHj5pR_dzubbuE_uPuvDk