创建 JWT 令牌
大多数 Bearer 令牌是 JWT,而授权服务器会自动发放它们,了解它们包含的信息是有益的。本节将带你完成创建天气服务应用程序的示例 OAuth JWT 的过程。JWT 是由三个用点(.)分隔的部分组成的字符串:头部、负载和签名。前两个部分是 Base64 编码的 JSON 对象,而签名是前两者的校验和。
头部
我们创建的第一个字符串是头部,它定义了基本的元数据,例如令牌的类型和用于签名算法的签名。示例 9-1 显示了在 JavaScript 中创建一个带有最基本元数据的简单头部。
javascript
const headerObject = {
"typ": "JWT",
"alg": "HS256"
}
示例 9-1:OAuth2 天气服务的 JWT 头部
我们将天气服务的令牌类型设置为 JWT,并指定我们使用 HMAC-SHA-256 算法来稍后计算签名。最后,我们将 JSON 对象存储在一个常量中,以便稍后使用。
负载
接下来,我们创建第二个字符串,即负载,它存储令牌的数据。负载的每个属性称为声明。在 OAuth 中,声明描述用户对象,通常是会话数据。JWT 规范包含三种类型的声明:注册声明、公共声明和私有声明。
注册声明
JWT 有七个注册声明,每个声明由三个字母组成。虽然一般的 JWT 中不需要这些声明,但 OAuth JWT 必须包含 iss、sub、aud 和 exp 注册声明。
发行者声明(iss)
发行者声明(iss)包含发布 JWT 的实体的唯一标识符。一个好的值可能是应用程序的 URL,如示例 9-2