Logo Logo
GitHub Designed by Logto

什麼是 OpenID Connect (OIDC) 發現?

OpenID Connect (OIDC) 發現,在 OpenID Connect Discovery 1.0 中定義,是一種機制,允許 客戶端 自動發現 OpenID 提供者的端點和配置。這是一種現代化的方法,簡化客戶端和 OpenID 提供者 之間的通信。

OIDC 發現包含兩個主要組件:

  • OpenID 提供者 issuer (提供者) 發現:客戶端可以通過 WebFinger 或一個外部文檔發現 issuer 的位置 (URL)。
  • OpenID 提供者元數據:客戶端可以檢索和處理元數據文檔,以瞭解 OpenID 提供者的功能和端點。

OIDC 發現如何運作?

OpenID 提供者 issuer (提供者) 發現

OpenID 提供者的 issuer 是一個唯一識別符 (通常與其 URL 相同),客戶端可以用來發現 OpenID 提供者的配置。然而,客戶端需要知道 issuer 的位置,才能檢索元數據文檔。

如果 issuer 的位置已知,客戶端可以直接進入下一步。否則,客戶端可以使用 WebFinger 來發現 issuer 的位置。OIDC issuer 發現所需的信息包括:

  • host: WebFinger 服務的宿主位置。
  • resource: OpenID 提供者的電子郵件地址或 URL。
  • rel: 關係類型,應設置為 http://openid.net/specs/connect/1.0/issuer

例如,一個擁有電子郵件地址 [email protected] 的用戶試圖在 example.com 發現 issuer 的位置。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 提供者元數據

一旦客戶端知道了 issuer 的位置,就可以從知名的端點檢索元數據文檔。元數據文檔的路徑相對於 issuer 的 URL 是 /.well-known/openid-configuration

例如,如果 issuer 的 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 提供者的有用信息。讓我們重點介紹幾個關鍵字段:

對於完整的元數據字段列表,請參考 OpenID Connect Discovery 1.0 規範。

另見