调用 OpenID Connect 的内省端点
内省端点允许访问令牌的持有者向发出该访问令牌的 OpenID Connect 提供者请求有关访问令牌的一组元数据。该访问令牌必须是通过 OpenID Connect 或 OAuth 认证获取的访问令牌。
开始之前
关于此任务
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。
过程
- 在 GET 或 POST 请求的 HTTP 基本授权标头中,使用已注册 OpenID Connect 客户机的客户机标识和密码设置客户机认证。此客户机标识和密码是使用 application/x-www-form-urlencoded 编码算法进行编码的。编码后的客户机标识用作用户名,编码后的密码用作密码。
- 在针对内省端点的 GET 或 POST 请求中,包括访问令牌的字符串值作为参数。
- 向内省端点 URL 发送 GET 或 POST 请求。
结果
对于有效请求,内省端点返回带有 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_code、password、refresh_token、client_credentials、resource_owner、implicit 和 urn: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"
}