理解 OpenID Connect (OIDC) 中的重定向 URI 和授權碼流
讓我們仔細看看重定向 URI,因為它是在 OIDC 身份驗證過程中一個重要的安全組件。
什麼是重定向 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:
當開始進行登入時:
- 授權請求:你的應用引導用戶至 OIDC 供應商的授權端點,包括
client_id
、response_type
、scope
和redirect_uri
等參數。 - 用戶驗證:用戶與 OIDC 供應商進行驗證。
- 授權碼傳遞:在成功驗證後,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
的授權碼,請遵循以下步驟:
-
提取授權碼:從重定向 URI 的查詢字符串中檢索碼參數。
-
用授權碼交換憑證:構造一個 POST 請求到 OIDC 供應商的令牌端點,包括:
client_id
:你在 OIDC 供應商中的應用程序 IDcode
:從重定向 URI 收到的授權碼code_verifier
:在客戶端上生成的隨機字符串redirect_uri
:授權請求中使用的相同 URIgrant_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 簡化你的開發工作。