理解 OpenID Connect (OIDC) 中的重定向 URI 和授權碼流程
讓我們仔細看看重定向 URI,因為它是 OIDC 認證過程中的關鍵安全組件。
什麼是重定向 URI?
重定向 URI,也稱為回覆 URL,是 OIDC 認證過程中的關鍵安全組件。它指定了通過 OIDC 提供者成功登入後用戶被引導至的 URL。更重要的是,應用程式在此接收獲得令牌所需的授權碼。
查看 重定向 URI wiki 以獲取更多詳情。
什麼是授權碼流程?
授權碼流程(在 OAuth 2.0 RFC 6749 第 4.1 節 定義)是 OIDC 的基本驗證方法。它涉及用授權碼交換訪問令牌和可選的刷新令牌。此流程適合能夠安全維護客戶端密鑰的應用程式,例如服務器端 Web 應用程式。
查看 授權碼流程 wiki 以獲取更多詳情。
重定向 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 SDK 簡化代碼交換過程
Logto SDK 是用特定編程語言或框架編寫的開發工具包,例如 Logto React SDK、Next.js SDK 和 Swift SDK。通過僅調用一兩個函數,使用 SDK 可以大大簡化流程。
以下是使用 Logto 官方 React SDK 的 React "Callback" 元件範例:
SDK 集成指南可在 Logto 快速入門文檔 中找到。
總結:為什麼掌握 OIDC 中的重定向 URI 很重要
理解 OIDC 中的重定向 URI 與授權碼流程對於保護和優化你的認證過程至關重要。通過註冊可信的重定向 URI 並有效地處理登入回調,你可以確保用戶無縫且安全的體驗,同時通過 Logto SDK 簡化開發工作。