Logo Logo
GitHub Designed by Logto

什么是 OpenID Connect (OIDC) 发现?

OpenID Connect (OIDC) 发现,定义在 OpenID Connect Discovery 1.0 中,是一种允许 客户端 自动发现 OpenID Provider 的端点和配置的机制。这是一种现代方法,用于简化客户端与 OpenID Provider 之间的通信。

OIDC 发现有两个主要组件:

  • OpenID Provider 发行者发现:客户端可以通过 WebFinger 或带外文档发现发行者的位置 (URL)。
  • OpenID Provider 元数据:客户端可以检索并处理元数据文档,以了解 OpenID Provider 的功能和端点。

OIDC 发现是如何工作的?

OpenID Provider 发行者发现

OpenID Provider 发行者是一个唯一标识符(通常与其 URL 相同),客户端可以使用它来发现 OpenID Provider 的配置。然而,客户端需要先知道发行者的位置,才能获取元数据文档。

如果发行者位置已知,客户端可以跳到下一步。否则,客户端可以使用 WebFinger 来发现发行者的位置。OIDC 发行者发现所需的信息包括:

  • host: WebFinger 服务的主机地址。
  • resource: OpenID Provider 的电子邮件地址或 URL。
  • rel: 关系类型,应设置为 http://openid.net/specs/connect/1.0/issuer

例如,一个邮件地址为 [email protected] 的用户尝试在 example.com 上发现发行者的位置。WebFinger 请求将如下所示:

GET /.well-known/webfinger?resource=acct%3Afoo%40bar.com&
  rel=http%3A%2F%2Fopenid.net%2Fspecs%2Fconnect%2F1.0%2Fissuer HTTP/1.1
Host: example.com

解码后的 resource 参数是 acct:[email protected]rel 参数是 http://openid.net/specs/connect/1.0/issuer

OpenID Provider 元数据

一旦客户端知道发行者的位置,它可以从知名端点检索元数据文档。元数据文档的路径是相对于发行者 URL 的 /.well-known/openid-configuration

例如,如果发行者的 URL 是 https://oidc.example.com,那么客户端可以从 https://oidc.example.com/.well-known/openid-configuration 检索元数据文档。以下是元数据响应的一个非规范性示例:

{
  "issuer": "https://oidc.example.com",
  "authorization_endpoint": "https://oidc.example.com/authorize",
  "token_endpoint": "https://oidc.example.com/token",
  //...
}

元数据文档包含许多关于 OpenID Provider 的有用信息。让我们重点介绍几个关键字段:

欲了解元数据字段的详尽列表,请参考 OpenID Connect Discovery 1.0 规范。

另请参阅