繁體中文(香港)
  • 重定向 uri
  • 回調
  • 授權碼
  • 碼流
  • oidc
  • pkce

理解 OpenID Connect (OIDC) 中的重定向 URI 和授權碼流

讓我們仔細看看重定向 URI,因為它是在 OIDC 身份驗證過程中一個重要的安全組件。

Charles
Charles
Developer

什麼是重定向 URI?

重定向 URI,也被稱為回覆 URL,是 OIDC 身份驗證過程中一個重要的安全組件。它指定了用戶通過 OIDC 供應商成功登入後被送達的 URL。更重要的是,這是你的應用程序接收獲取憑證所需的授權碼的地方。

請查看 Auth Wiki > Redirect URI 獲取更多詳情。

什麼是授權碼流?

授權碼流(在 OAuth 2.0 RFC 6749, section 4.1 中定義)是 OIDC 中的一種基本身份驗證方法。它涉及用授權碼交換存取令牌,並可選地交換刷新令牌。此流程適合於可以安全維護客戶端祕密的應用程序,如伺服器端的網絡應用程序。

請查看 Auth Wiki > Authorization Code Flow 獲取更多詳情。

重定向 URI 在授權碼流中的工作方式是怎樣的?

在授權碼流中,重定向 URI 是 OIDC 供應商在用戶成功驗證後發送授權碼的目的地。為了確保安全並防止未經授權的重定向,它必須預先向 OIDC 供應商註冊。

以下是你如何在 Logto Console 中註冊重定向 URI: redirect-uri

當開始進行登入時:

  1. 授權請求:你的應用引導用戶至 OIDC 供應商的授權端點,包括 client_idresponse_typescoperedirect_uri 等參數。
  2. 用戶驗證:用戶與 OIDC 供應商進行驗證。
  3. 授權碼傳遞:在成功驗證後,OIDC 供應商將用戶重定向到指定的 redirect_uri,並附帶授權碼作為查詢參數。

OIDC 供應商將驗證 redirect_uri 是否在預先註冊的 URI 清單中。如果不匹配,將返回 invalid_redirect_uri 錯誤,通過防止未授權的端點接收令牌來提高安全性。

重定向 URI 的最佳實踐

在現實使用案例中,一個常見的最佳實踐是聲明一個專用的 "Callback" 頁面,並關聯一個支持從外部直接訪問的路由或深鏈接。這個鏈接應用作為重定向 URI。

假設你有一個在 https://my-app.com 上運行的單頁 web 應用,通常重定向 URI 會被聲明為 https://my-app.com/callback

或者,如果是原生移動應用,那麼重定向 URI 通常以自訂方案開頭,例如 com.company://myapp/callback

其他最佳實踐包括:

  • 避免使用通配符:不要在重定向 URI 中使用通配符模式。明確列出所有允許的 URI,以防止未經授權的訪問。
  • 精確匹配:確保重定向 URI 與在 OIDC 供應商中註冊的完全匹配。即使是一個尾隨的斜杠也可以引起不匹配。

處理登入回調

要處理返回到你的 redirect_uri 的授權碼,請遵循以下步驟:

  1. 提取授權碼:從重定向 URI 的查詢字符串中檢索碼參數。

  2. 用授權碼交換憑證:構造一個 POST 請求到 OIDC 供應商的令牌端點,包括:

    • client_id:你在 OIDC 供應商中的應用程序 ID
    • code:從重定向 URI 收到的授權碼
    • code_verifier:在客戶端上生成的隨機字符串
    • redirect_uri:授權請求中使用的相同 URI
    • grant_type:授權類型,通常為 authorization_code

JavaScript 中的憑證交換請求樣例

利用 Logto SDKs 簡化代碼交換過程

Logto SDKs 是用特定的程式語言或框架編寫的開發工具包,例如 Logto React SDK, Next.js SDK 和 Swift SDK。使用 SDK 可以大大簡化,只需調用一兩個函數。

這裡是使用 Logto 官方 React SDK 的 "Callback" 組件範例:

SDK 集成指南可在 Logto Docs > Quick-starts 找到。

回顧:為什麼掌握 OIDC 中的重定向 URI 很重要

理解 OIDC 中授權碼流的重定向 URI 對於確保和優化你的身份驗證過程至關重要。通過註冊可信的重定向 URI 並有效地處理登入回調,你可以確保用戶獲得無縫和安全的體驗,並通過 Logto SDKs 簡化你的開發工作。