调用 OpenID Connect 的内省端点

内省端点允许访问令牌的持有者向发出该访问令牌的 OpenID Connect 提供者请求有关访问令牌的一组元数据。该访问令牌必须是通过 OpenID Connect 或 OAuth 认证获取的访问令牌。

开始之前

资源服务或客户机应用程序调用内省端点时,它必须将自身注册为 OpenID Connect 服务器的正常 OAuth 2.0 客户机。所注册客户机元数据必须包含属性 introspectTokens = true

关于此任务

OpenID Connect 和 OAuth 2.0 中使用的访问令牌内包含的信息对客户机是不透明的。这允许受保护资源或客户机根据 OpenID Connect 提供者返回的有关访问令牌的元数据制定权限决策。

已启用 OpenID Connect 的 Liberty 服务器可访问位于以下 URL 的 OpenID Connect 内省端点:

 https://server.example.com:443/oidc/endpoint/<provider_name>/introspect
避免故障: 如果要使用出站代理,请注意 OpenID Connect RP 未提供通过代理主机自动路由请求的方法。

如果必须使用代理来访问 OpenID Connect 提供者 (OP),那么您对与任何 OP 相关的 URL 属性输入的值必须包含代理主机和端口,而不是外部 OP 主机和端口。

在大部分情况下,可将 OP 主机和端口替换为代理主机和端口。您输入的 URL 必须对 RP 和客户端(浏览器或应用程序)可视。有关如何确定要使用的正确 URL 的进一步指南,请联系代理管理员。

在此示例中,客户机期望 SSL 端口设置为 443。

过程

  1. GETPOST 请求的 HTTP 基本授权标头中,使用已注册 OpenID Connect 客户机的客户机标识和密码设置客户机认证。此客户机标识和密码是使用 application/x-www-form-urlencoded 编码算法进行编码的。编码后的客户机标识用作用户名,编码后的密码用作密码。
  2. 在针对内省端点的 GETPOST 请求中,包括访问令牌的字符串值作为参数。
  3. 向内省端点 URL 发送 GETPOST 请求。

结果

完成这些步骤后,您将获得有效 HTTP 请求,此请求将按“示例”一节中所示发送至内省端点。

对于有效请求,内省端点返回带有 application/json 格式的 JSON 对象的 HTTP 200 响应,根据访问令牌是处于活动状态还是已到期,该对象包含以下信息。

如果访问令牌处于活动状态,那么此端点返回 active:true,并且 JSON 对象包含以下附加信息:

  • active:布尔指示符,指示访问令牌是否处于活动状态。
  • client_id:这是请求访问令牌的 OpenID Connect 客户机的客户机标识。
  • sub:这是授予访问令牌的资源所有者。
  • scope:与访问令牌相关联的作用域的空格分隔列表。
  • iat:自 1970 年 1 月 1 日 (UTC) 以来的整数时间戳记(以秒计),指示访问令牌的发出时间。
  • exp:自 1970 年 1 月 1 日 (UTC) 以来的整数时间戳记(以秒计),指示访问令牌的到期时间。
  • realmName:资源所有者的领域名。
  • uniqueSecurityName:资源所有者的唯一安全名称。
  • tokenType:访问令牌类型。对于 OpenID Connect,此值为 Bearer
  • grant_type:一个字符串,指示用于生成访问令牌的授权类型。可能的值为:authorization_codepasswordrefresh_tokenclient_credentialsresource_ownerimpliciturn:ietf:params:oauth:grant-type:jwt-bearer

如果访问令牌已到期,但所提供认证有效,或者如果所提供访问令牌为错误类型,那么此端点在 JSON 对象中返回 active:false

注: 如果客户机或资源服务要执行访问令牌内省,那么该客户机或资源服务必须将其自身注册为 OpenID Connect 提供者的客户机,并且客户机元数据必须将 introspect_tokens 设置为 true

示例

下面显示处于活动状态和已到期的访问令牌及请求的示例。

以下显示请求示例:

  POST /register HTTP/1.1
 Accept: application/x-www-form-urlencoded
 Authorization: Basic czZCaGRSa3F0Mzo3RmpmcDBaQnIxS3REUmJuZlZkbUl3
     token=SOYleDziTitHeKcodp6vqEmRwKPjz3lFZTcsQtVC

活动访问令牌的响应示例:

 HTTP/1.1 200 OK
 Content-Type: application/json
 Cache-Control: no-store
{  
   "exp"                : 1415307710,
   "realmName"          : "BasicRealm",
   "sub"                : "testuser",
   "scope"              : "openid scope2 scope1",
   "grant_type"         : "authorization_code",
   "uniqueSecurityName" : "testuser",
   "active"             : true,
   "token_type"         : "Bearer",
   "client_id"          : "pclient01",
   "iat"                : 1415307700
}

到期访问令牌的响应示例:

 HTTP/1.1 200 OK
 Content-Type: application/json
 Cache-Control: no-store
 {
     "active":"false"
 }

用于指示主题类型的图标 任务主题

文件名:twlp_oidc_introspection_endpoint.html