認識 OpenID Connect (OIDC) 中的重定向 URI 及授權碼流程
讓我們深入了解重定向 URI,因為它是 OIDC 身份驗證過程中的關鍵安全組件。
甚麼是重定向 URI?
重定向 URI,也稱為回覆 URL,是 OIDC 身份驗證過程中的關鍵安全組件。它指定了通過 OIDC 提供者成功登入後用戶將被發送到的 URL。更重要的是,它是你的應用程式接收獲得令牌所需的授權碼的地方。
查看 重定向 URI 維基 以獲取更多詳情。
甚麼是授權碼流程?
授權碼流程(在 OAuth 2.0 RFC 6749,第 4.1 節 中定義)是 OIDC 中的基礎身份驗證方法。它涉及用授權碼交換訪問令牌,並且可選擇性地交換刷新令牌。該流程適合能夠安全維護客戶端密鑰的應用程式,例如伺服器端的網頁應用程式。
查看 授權碼流程維基 以獲取更多詳情。
重定向 URI 如何在授權碼流程中運作?
在授權碼流程中,重定向 URI 是 OIDC 提供者在用戶成功驗證後發送授權碼的目的地。它必須預先向 OIDC 提供者註冊以確保安全並防止未經授權的重定向。
以下是如何在 Logto 控制台 中註冊重定向 URI:
當開始登入時:
- 授權請求:你的應用程序將用戶定向到 OIDC 提供者的授權端點,包括參數如
client_id
、response_type
、scope
和redirect_uri
。 - 用戶驗證:用戶在 OIDC 提供者處驗證身份。
- 授權碼傳遞:驗證成功後,OIDC 提供者將用戶重定向到指定的
redirect_uri
,並作為查詢參數包含授權碼。
OIDC 提供者會驗證 redirect_uri
是否在預註冊的 URI 列表中。如果不匹配,將返回一個 invalid_redirect_uri
錯誤,以通過防止未經授權的端點接收令牌來加強安全性。
重定向 URI 的最佳實踐
在真實情況中,一個常見的最佳實踐是聲明一個專用的"回調"頁面並關聯允許外部直接訪問的路由 / 深層鏈接。此鏈接應用作重定向 URI。
假設你有一個單頁網頁應用程式,運行在 https://my-app.com
,那麼通常將重定向 URI 聲明為 https://my-app.com/callback
或者如果它是一個原生移動應用程式,那麼重定向 URI 通常以自定義方案開頭,例如 com.company://myapp/callback
其他最佳實踐包括:
- 避免使用萬用字元:不要在重定向 URI 中使用萬用字元模式。明確列出所有允許的 URI 以防止未經授權的訪問。
- 精確匹配:確保重定向 URI 與在 OIDC 提供者中註冊的 URI 精確匹配。即使 是一個尾隨的斜槓也可能造成不匹配。
處理登入回調
要處理返回到你的 redirect_uri
的授權碼,請按照以下步驟:
-
提取授權碼:從重定向 URI 的查詢字符串中檢索代碼參數。
-
用授權碼交換令牌:組合一個發往 OIDC 提供者令牌端點的 POST 請求,包括:
client_id
: 你在 OIDC 提供者中的應用程式 IDcode
: 從重定向 URI 收到的授權碼code_verifier
: 客戶端生成的隨機字符串redirect_uri
: 與授權請求中使用的相同 URIgrant_type
: 授權類型,通常為authorization_code
JavaScript 中的樣本令牌交換請求
利用 Logto SDK 簡化 Logto 中的代碼交換過程
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 簡化你的開發工作。