JOSE is a framework intended to provide a method to securely transfer claims (such as authorization information) between parties. The JOSE framework provides a collection of specifications to serve this purpose. A JSON Web Token (JWT) contains claims that can be used to allow a system to apply access control to resources it owns. One potential use case of the JWT is as the means of authentication and authorization for a system that exposes resources through an OAuth 2.0 model.

标头声明

声明 格式 说明
typ 字符串 - 始终为“JWT” 指示令牌是 JWT 令牌。
alg String 指示用于对令牌签名的算法。 示例:“RS256”
kid String 指定用于对此令牌的签名进行验证的公钥的指纹。 在 v1.0 和 v2.0 令牌中已发出。
x5t 字符串 功能与 kid 相同(在用法和值方面)。 x5t 是在 v1.0 ID 令牌中仅出于兼容目的而发出的旧式声明。

有效负载声明

声明 格式 说明
aud 字符串,应用 ID GUID 标识令牌的目标接收方。 在 id_tokens 中,受众是在 Azure 门户中分配给应用的应用程序 ID。 应验证此值。 如果令牌无法与应用的应用程序 ID 匹配,则应拒绝。
iss 字符串,证书颁发者 URI 标识证书颁发者,或构造并返回令牌的“授权服务器”。 还标识在其中进行用户身份验证的 Azure AD 租户。 如果令牌由 v2.0 终结点颁发,则 URI 将以 /v2.0 结尾。 表示用户是来自 Microsoft 帐户的使用者用户的 GUID 为 9188040d-6c67-4c5b-b112-36a304b66dad。 应用应该使用声明的 GUID 部分限制可登录应用的租户集(如果适用)。
iat int,Unix 时间戳 “Issued At”表示针对此令牌进行身份验证的时间。
nbf int,Unix 时间戳 “nbf”(不早于)声明指定只能在哪个时间之后接受 JWT 的处理。
exp int,Unix 时间戳 “exp”(过期时间)声明指定哪个时间或之后不能接受 JWT 以进行处理。 务必注意,在某些情况下,资源可能会在此时间之前拒绝该令牌。 例如,如果需要更改身份验证或已检测到令牌吊销。
c_hash String 仅当 ID 令牌随 OAuth 2.0 授权代码一起颁发时,代码哈希才包含在 ID 令牌中。 它可用于验证授权代码的真实性。 若要了解如何执行此验证,请参阅 OpenID Connect 规范。
at_hash String 仅当 ID 令牌颁发自 /authorize 终结点并随 OAuth 2.0 访问令牌一起颁发时,访问令牌哈希才包含在 ID 令牌中。 它可用于验证访问令牌的真实性。 若要了解如何执行此验证,请参阅 OpenID Connect 规范。 这不会返回来自 /token 终结点的 ID 令牌。
preferred_username String 表示用户的主用户名。 可以是电子邮件地址、电话号码或未指定格式的一般用户名。 其值是可变的,可能随时改变。 由于此值可更改,因此不得用于做出授权决策。 需要 profile 作用域才能接收此声明。
email String 对于具有电子邮件地址的来宾帐户,默认情况下会提供 email 声明。
name String 此 name 声明提供了标识令牌使用者的用户可读值。 此值不一定唯一,它可以更改,旨在仅用于显示目的。 需要 profile 作用域才能接收此声明。
nonce String nonce 与发送给 IDP 的原始 /authorize 请求中包含的参数匹配。 如果不匹配,应用程序会拒绝此令牌。
sub String 令牌针对其断言信息的主体,例如应用的用户。 此值固定不变,无法重新分配或重复使用。 使用者是成对标识符 - 它对特定应用程序 ID 是唯一的。 如果单个用户使用两个不同的客户端 ID 登录到两个不同的应用,这些应用将收到两个不同的使用者声明值。 这不一定是所需的,具体取决于体系结构和隐私要求。

  1. https://jose.readthedocs.io/en/latest/ - Javascript Object Signing and Encryption (JOSE)
  2. https://docs.microsoft.com/zh-cn/azure/active-directory/develop/id-tokens - Microsoft 标识平台 ID 令牌