IBM Cloud Docs
令牌

令牌

成功认证用户后,应用程序将从 App ID 接收令牌。 该服务使用三种主要令牌来完成身份验证过程,即访问令牌、身份令牌和刷新令牌。

访问令牌

访问令牌代表授权,可与受 App ID 设置的授权过滤器保护的 后端资源 进行通信。 访问令牌符合 JavaScript 对象签名和加密 (JOSE) 规范。 令牌的格式为 JSON Web 令牌使用使用 RS256 算法的 JSON Web 密钥签名。

示例令牌:

Header:
{
   "alg": "RS256",
   "typ": "JWT",
   "kid": "appId-39a37f57-a227-4bfe-a044-93b6e6050a61-2018-08-02T11:57:43.401",
   "ver": 4
}
Payload:
{
   "iss": "https://us-south.appid.cloud.ibm.com/oauth/v4/39a37f57-a227-4bfe-a044-93b6e6050a61",
   "exp": 1551903163,
   "aud": [
   "968c2306-9aef-4109-bc06-4f5ed6axi24a"
   ],
   "sub": "2b96cc04-eca5-4122-a8de-6e07d14c13a5",
   "email_verified": true,
   "amr": [
   "cloud_directory"
   ],
   "iat": 1551899553,
   "tenant": "39a37f57-a227-4bfe-a044-93b6e6050a61",
   "scope": "openid appid_default appid_readprofile appid_readuserattr appid_writeuserattr appid_authenticated"
}

身份令牌

身份令牌表示认证并包含关于用户的信息。 身份令牌可以为您提供有关用户的姓名、电子邮件、性别和位置的信息。 令牌还可以返回用户图像的 URL。 令牌的格式为 JSON Web 令牌使用使用 RS256 算法的 JSON Web 密钥签名。

示例令牌:

Header:
{
   "alg": "RS256",
   "typ": "JWT",
   "kid": "appId-39a37f57-a227-4bfe-a044-93b6e6050a61-2018-08-02T11:57:43.401",
   "ver": 4
}
Payload:
{
   "iss": "https://us-south.appid.cloud.ibm.com/oauth/v4/39a37f57-a227-4bfe-a044-93b6e6050a61",
   "aud": [
   "968c2306-9aef-4109-bc06-4f5ed6axi24a"
   ],
   "exp": 1551903163,
   "tenant": "39a37f57-a227-4bfe-a044-93b6e6050a61",
   "iat": 1551899553,
   "email": "appid155@mailinator.com",
   "name": "appid155@mailinator.com",
   "sub": "2b96cc04-eca5-4122-a8de-6e07d14c13a5",
   "email_verified": true,
   "identities": [
   {
      "provider": "cloud_directory",
      "id": "118c0278-3526-4954-876b-cf70eb88efa2"
   }
   ],
   "amr": [
   "cloud_directory"
   ]
}

身份令牌仅包含部分用户信息。 要查看身份供应商提供的所有信息,可以使用 /userinfo 端点

刷新令牌

App ID 支持获取新的访问和身份令牌而无需重新认证的能力,如 OIDC 所定义。 可以使用刷新令牌来更新访问令牌,这样用户就不必执行任何操作来登录,例如提供凭证。 与访问令牌类似,刷新令牌包含可让 App ID 确定您是否授权的数据。 但是,这些令牌是不透明的。

刷新令牌配置为具有比常规访问令牌更长的生命周期。 当访问令牌到期时,刷新令牌仍然有效,并且可用于更新访问令牌。可以将 App ID的刷新令牌配置为持续 1-90 天。 要充分利用刷新令牌,请在令牌完整生命周期内持久存储令牌,或者将令牌持久存储至更新为止。 用户不能只使用刷新令牌来直接访问资源,因此持久存储刷新令牌比持久存储访问令牌更安全。 最佳做法是,刷新令牌应由客户端安全地存储,客户端接收这些令牌,并仅将其发送到颁发令牌的授权服务器。

为了更加方便,App ID 还会在更新访问令牌时更新刷新令牌及其到期日期,这样用户就可以在当前刷新令牌到期前的某个时间点保持登录状态。 另外,如果您想使用刷新令牌,但又想强制用户定期登录,您的应用程序可以只使用用户输入凭据登录时返回的刷新令牌。 不过,我们建议始终使用从 App ID 收到的最新刷新令牌,如 OAuth 2.0 规范所述。

虽然这些令牌可以简化登录过程,但应用程序不得依赖于这些令牌。 可以随时撤销这些令牌,例如,当您认为刷新令牌已泄密时。 如果需要,可以使用两种方法来撤销刷新令牌。 如果您拥有刷新令牌,您可以根据 RFC7009. 另外,如果您有用户 ID,也可以使用 管理 API 撤销刷新令牌。 有关访问管理 API 的更多信息,请参阅管理 服务访问

有关使用刷新令牌以及如何使用这些刷新令牌来实现“记住我”功能的示例,请参阅入门样本

令牌来自何处?

令牌通过 App ID OAuth 服务器发放,格式为 JSON Web 令牌(JWT)。 令牌是使用 JSON Web 密钥(JWK) 使用 RS256 算法进行签名的。

会怎样处理令牌包含的信息?

访问令牌包含一组标准 JWT 声明和一组特定于 App ID 的声明,例如租户标识。 身份令牌包含特定于用户的信息。 令牌中的信息在用户概要文件中存储为声明。

如何接收令牌?

成功认证后,应用程序将接收到令牌。 您的应用程序可以使用令牌检索有关用户授权和身份验证的信息。 访问令牌可用于通过向资源发送请求来获取对受保护资源的访问权。 要抽取令牌,应用程序必须解析头。

示例请求:

GET /resource HTTP/1.1
Host: server.example.com
Authorization: Bearer  mF_9.B5f-4.1JqM mF_9.B5f-4.1JqM

如何配置令牌?

可以使用定制声明映射来定制令牌。 有关更多信息,请参阅定制令牌