設定 OpenID Connect (OIDC) 社交登入
Logto 的 OpenID Connect (OIDC) 協議官方連接器。
本指南假設你已對 Logto 連接器 (Connectors) 有基本了解。若不熟悉,請參閱 連接器 (Connectors) 指南以開始使用。
開始使用
OIDC 連接器使 Logto 能夠連接到支持 OIDC 協議的任意社交身分提供者。
OIDC 連接器是 Logto 中一種特殊的連接器,你可以新增一些基於 OIDC 的連接器。
建立你的 OIDC 應用程式
當你打開此頁面時,我們相信你已經知道要連接哪個社交身分提供者。首先要確認的是該身分提供者是否支援 OIDC 協議,這是配置有效連接器的前提條件。然後,按照身分提供者的指示註冊並建立相關的 OIDC 授權應用程式。
配置你的連接器
出於安全考量,我們僅支援「Authorization Code」授權類型,這非常適合 Logto 的場景。
clientId
和 clientSecret
可以在你的 OIDC 應用程式詳細資訊頁面找到。
clientId:客戶端 ID 是在註冊時用來識別客戶端應用程式的唯一識別符。授權伺服器使用此 ID 驗證客戶端應用程式的身分,並將任何授權的存取權杖與該特定客戶端應用程式關聯。
clientSecret:客戶端密鑰是在註冊時由授權伺服器發給客戶端應用程式的機密金鑰。客戶端應用程式使用此密鑰在請求存取權杖時向授權伺服器進行驗證。客戶端密鑰被視為機密資訊,應始終保持安全。
tokenEndpointAuthMethod:權杖端點驗證方法由客戶端應用程式用來在請求存取權杖時向授權伺服器進行驗證。要發現支援的方法,請查閱 OAuth 2.0 服務提供者的 OpenID Connect 發現端點中的 token_endpoint_auth_methods_supported
欄位,或參考 OAuth 2.0 服務提供者提供的相關文件。
clientSecretJwtSigningAlgorithm (可選):僅在 tokenEndpointAuthMethod
為 client_secret_jwt
時需要。客戶端密鑰 JWT 簽名算法由客戶端應用程式用來簽署在權杖請求期間發送給授權伺服器的 JWT。
scope:權限範圍參數用來指定客戶端應用程式請求存取的資源和權限集合。權限範圍參數通常定義為一個以空格分隔的值列表,代表特定的權限。例如,權限範圍值「read write」可能表示客戶端應用程式請求對使用者資料的讀取和寫入存取。
你應該能在社交供應商的文件中找到 authorizationEndpoint
、tokenEndpoint
、jwksUri
和 issuer
作為 OpenID 提供者的配置信息。
authenticationEndpoint:此端點用來啟動驗證過程。驗證過程通常涉及使用者登入並授權客戶端應用程式存取其資源。
tokenEndpoint:此端點由客戶端應用程式用來獲取可用於存取請求資源的 ID 權杖。客戶端應用程式通常向權杖端點發送帶有授權類型和授權碼的請求以接收 ID 權杖。
jwksUri:這是可以獲取社交身分提供者(簡稱 IdP)JSON Web Key Set (JWKS) 的 URL 端點。JWKS 是一組加密金鑰,IdP 用來簽署和驗證在驗證過程中發出的 JSON Web Tokens (JWTs)。jwksUri
由依賴方 (RP) 用來獲取 IdP 用來簽署 JWT 的公鑰,以便 RP 可以驗證從 IdP 接收到的 JWT 的真實性和完整性。
issuer:這是 IdP 的唯一識別符,由 RP 用來驗證從 IdP 接收到的 JWT。它作為 iss
宣告 (claim) 包含在 JWT 中(ID 權杖始終是 JWT)。簽發者值應與 IdP 的授權伺服器的 URL 匹配,並且應為 RP 信任的 URI。當 RP 接收到 JWT 時,它會檢查 iss
宣告以確保它是由受信任的 IdP 簽發的,並且該 JWT 是用於 RP 的。
jwksUri
和 issuer
一起提供了一種安全機制,讓 RP 在驗證過程中驗證終端使用者的身分。通過使用從 jwksUri
獲得的公鑰,RP 可以驗證 IdP 簽發的 JWT 的真實性和完整性。簽發者值確保 RP 僅接受由受信任的 IdP 簽發的 JWT,並且這些 JWT 是用於 RP 的。
由於驗證請求始終是必需的,因此提供了 authRequestOptionalConfig
來包裝所有可選配置,你可以在 OIDC 驗證請求 中找到詳細資訊。你可能還會發現此配置中缺少 nonce
。由於 nonce
應在每個請求中相同,我們將 nonce
的生成放在程式碼實現中。所以不用擔心!前面提到的 jwksUri
和 issuer
也包含在 idTokenVerificationConfig
中。
你可能會好奇為什麼標準 OIDC 協議支援隱式和混合流,而 Logto 連接器僅支援授權流。已確定隱式和混合流比授權流安全性較低。由於 Logto 專注於安全性,儘管其便利性稍差,但它僅支援授權流以提供給使用者最高級別的安全性。
responseType
和 grantType
在「Authorization Code」流中只能是固定值,因此我們將它們設為可選,並會自動填入預設值。
對於所有流類型,我們提供了一個可選的 customConfig
鍵來放置你的自訂參數。
每個社交身分提供者可能在 OIDC 標準協議上有自己的變體。如果你想要的社交身分提供者嚴格遵循 OIDC 標準協議,那麼你不需要關心 customConfig
。
配置類型
名稱 | 類型 | 必需 |
---|---|---|
scope | string | 是 |
clientId | string | 是 |
clientSecret | string | 是 |
authorizationEndpoint | string | 是 |
tokenEndpoint | string | 是 |
idTokenVerificationConfig | IdTokenVerificationConfig | 是 |
authRequestOptionalConfig | AuthRequestOptionalConfig | 否 |
customConfig | Record<string, string> | 否 |
AuthRequestOptionalConfig 屬性 | 類型 | 必需 |
---|---|---|
responseType | string | 否 |
tokenEndpoint | string | 否 |
responseMode | string | 否 |
display | string | 否 |
prompt | string | 否 |
maxAge | string | 否 |
uiLocales | string | 否 |
idTokenHint | string | 否 |
loginHint | string | 否 |
acrValues | string | 否 |
IdTokenVerificationConfig 屬性 | 類型 | 必需 |
---|---|---|
jwksUri | string | 是 |
issuer | string | string[] | 否 |
audience | string | string[] | 否 |
algorithms | string[] | 否 |
clockTolerance | string | number | 否 |
crit | Record<string, string | boolean> | 否 |
currentDate | Date | 否 |
maxTokenAge | string | number | 否 |
subject | string | 否 |
typ | string | 否 |
查看 這裡 以獲取有關 IdTokenVerificationConfig
的更多詳細資訊。