分享方式:


重新導向 URI (回復 URL) 大綱和限制

重新導向 URI 或回復 URL 是 Microsoft Entra 授權伺服器成功授權並獲授與授權碼或存取令牌後,傳送使用者的位置。 若要登入使用者,您的應用程式必須將登入要求傳送至 Microsoft Entra 授權端點,並將重新導向 URI 指定為參數。 Microsoft Entra 驗證伺服器會檢查它收到的重新導向 URI 是否已新增至應用程式註冊。 重新導向 URI 是重要的安全性功能,可確保授權碼和存取令牌只會傳送給預期的收件者。 本文概述 Microsoft 身分識別平台 中重新導向 URI 的功能和限制。

為何需要將重新導向 URI 新增至應用程式註冊

基於安全性考慮,Microsoft Entra 授權伺服器不會將使用者重新導向或將令牌傳送至未新增至應用程式註冊的 URI。 Entra 登入伺服器只會將使用者重新導向,並將令牌傳送至已新增至應用程式註冊的 URI。 如果登入要求中指定的重新導向 URI 不符合您在應用程式中新增的任何重新導向 URI,您會收到錯誤訊息,例如 AADSTS50011: The reply URL specified in the request does not match the reply URLs configured for the application。 如需錯誤碼的詳細資訊,請參閱 Microsoft Entra 驗證和授權錯誤碼

哪些平臺需要重新導向 URI?

如果您要建置的應用程式在應用程式註冊中包含一或多個重新導向 URI,您必須啟用 公用用戶端流程設定。 下表提供您應該或不應該根據您要建置應用程式之平臺新增的重新導向 URI 類型指引。

Web 應用程式重新導向 URI 組態

您的應用程式類型 一般語言/架構 在應用程式註冊中新增重新導向 URI 的平臺
在伺服器上執行大部分應用程式邏輯的傳統 Web 應用程式 Node.js、web、ASP.NET、Python、Java、ASP.NET Core、PHP、Ruby、Blazor Server Web
單頁應用程式,大部分的使用者介面邏輯會在與 Web 伺服器通訊的網頁瀏覽器中執行,主要使用 Web API JavaScript、Angular、React、Blazor WebAssembly、Vue.js 單頁應用程式 (SPA)

行動和傳統型應用程式重新導向 URI 設定

您的應用程式類型 一般語言/架構 在應用程式註冊中新增重新導向 URI 的平臺
iOS 或 macOS 應用程式,不包括下表所列的案例 Swift、Objective-C、Xamarin IOS/macOS
Android 應用程式 Java、Kotlin、Xamarin Android
在行動裝置或桌面電腦上以原生方式執行的應用程式 Node.js電子、Windows 桌面、UWP、React Native、Xamarin、Android、iOS/macOS 行動應用程式與傳統型應用程式

如果您要使用下列其中一種方法建置 iOS 應用程式,請使用 行動裝置和傳統型應用程式 平臺來新增重新導向 URI:

  • 使用舊版 SDK 的 iOS 應用程式 (ADAL)
  • 使用 開放原始碼 SDK 的 iOS 應用程式 (AppAuth)
  • iOS 應用程式使用我們不支援的跨平台技術 (Flutter)
  • 直接實作 OAuth 通訊協定的 iOS 應用程式
  • 使用跨平台技術的 macOS 應用程式,我們不支援 (電子)

不需要重新導向 URI 的應用程式

應用程式類型 範例/附注 相關聯的 OAuth 流程
在沒有鍵盤的裝置上執行的應用程式 在智慧型手機電視、IoT 裝置或印表機上執行的應用程式 裝置程式代碼流程 深入瞭解
處理密碼使用者直接輸入的應用程式,而不是將使用者重新導向至 Entra 託管的登入網站,並讓 Entra 以安全的方式處理用戶密碼。 只有在授權碼流程等其他更安全的流程無法運作時,才應該使用此流程,因為它不如安全。 資源擁有者密碼認證流程 深入瞭解
使用 Windows 整合式驗證流程而非 Web 帳戶管理員,在 Windows 或連線到 Windows 網域的電腦上執行桌面或行動應用程式(AD 或已加入 Azure AD) 使用者使用 Entra 認證登入 Windows 電腦系統之後,應該自動登入的桌面或行動應用程式 Windows 整合式驗證流程 深入瞭解

Microsoft Entra 應用程式的重新導向 URI 有何限制?

Microsoft Entra 應用程式模型會指定下列限制來重新導向 URI:

  • 重新導向 URI 的開頭必須是 配置 https,但 某些 localhost 重新導向 URI 除外。

  • 重新導向 URI 會區分大小寫,且必須符合執行中應用程式的 URL 路徑大小寫。

    範例:

    • 如果應用程式在其路徑 .../abc/response-oidc中包含 ,請勿在重新導向 URI 中指定 .../ABC/response-oidc 。 由於網頁瀏覽器會將路徑視為區分大小寫,因此如果重新導向至不相符.../ABC/response-oidc的 URL,則可能會排除與相關聯的 .../abc/response-oidc Cookie。
  • 回應中未設定路徑區段的重新導向 URI 會以尾端斜線 (''/) 傳回。 只有在回應模式為 queryfragment時,才適用此動作。

    範例:

    • https://contoso.com 傳回為 https://contoso.com/
    • http://localhost:7071 傳回為 http://localhost:7071/
  • 包含路徑區段 的重新導向 URI 不會 附加回應中的尾端斜線。

    範例:

    • https://contoso.com/abc 傳回為 https://contoso.com/abc
    • https://contoso.com/abc/response-oidc 傳回為 https://contoso.com/abc/response-oidc
  • 重新導向 URI 不支援 特殊字元 - ! $ ' ( ) , ;

重新導向 URI 和 URI 長度上限

基於 安全性考慮,無法引發重新導向 URI 的最大數目。 如果您的案例需要比允許的最大限制更多的重新導向 URI,請考慮使用下列 狀態參數方法 作為解決方案。 下表顯示您可以在 Microsoft 身分識別平台 中新增至應用程式註冊的重新導向 URI 數目上限。

正在登入的帳戶 重新導向 URI 數目上限 描述
任何組織的 Microsoft Entra 租使用者中的 Microsoft 公司或學校帳戶 256 signInAudience 應用程式指令清單中的欄位設定為 AzureADMyOrgAzureADMultipleOrgs
個人 Microsoft 帳戶和公司與學校帳戶 100 signInAudience 應用程式指令清單中的欄位設定為 AzureADandPersonalMicrosoftAccount

您可以針對新增至應用程式註冊的每個重新導向 URI 使用最多 256 個字元。

應用程式與服務主體物件中的重新導向 URI

  • 一律 只將重新導向 URI 新增至應用程式物件。
  • 請勿 將重新導向 URI 值新增至服務主體,因為當服務主體對象與應用程式物件同步時,可能會移除這些值。 這可能是因為觸發兩個對象之間同步處理的任何更新作業所造成。

重新導向 URI 中的查詢參數支援

只有使用公司或學校帳戶登入使用者的應用程式,允許使用重新導向 URI 來查詢參數

任何設定為使用個人 Microsoft 帳戶登入的使用者,例如 Outlook.com(Hotmail)、Messenger、OneDrive、MSN、Xbox Live 或 Microsoft 365,都不允許重新導向 URI 中的查詢參數

應用程式註冊登入物件 支援重新導向 URI 中的查詢參數
僅限此組織目錄中的帳戶 (僅限 Contoso - 單一租用戶)
任何組織目錄中的帳戶 (任何 Microsoft Entra 目錄 - 多組織用戶共享)
任何組織目錄中的帳戶 (任何 Microsoft Entra 目錄 - 多租使用者) 和個人 Microsoft 帳戶 (例如 Skype 和 Xbox)
僅限個人 Microsoft 帳戶

支援的配置

HTTPS:所有 HTTP 型重新導向 URI 都支援 HTTPS 配置 (https://)。

HTTP:只有localhost URI 才支援 HTTP 配置 (http://),而且應該只在作用中的本機應用程式開發和測試期間使用。

重新導向 URI 範例 有效期
https://contoso.com 有效
https://contoso.com/abc/response-oidc 有效
https://localhost 有效
http://contoso.com/abc/response-oidc 無效
http://localhost 有效
http://localhost/abc 有效

Localhost 例外狀況

每個 RFC 8252 區段 8.37.3、「回送」或「localhost」重新導向 URI 隨附兩個特殊考慮:

  1. http URI 配置是可接受的,因為重新導向永遠不會離開裝置。 因此,這兩個 URI 都是可接受的:
    • http://localhost/myApp
    • https://localhost/myApp
  2. 由於原生應用程式經常需要暫時埠範圍,因此會忽略埠元件(例如 :5001:443),以符合重新導向 URI 的目的。 因此,所有這些 URI 都視為對等:
    • http://localhost/MyApp
    • http://localhost:1234/MyApp
    • http://localhost:5000/MyApp
    • http://localhost:8080/MyApp

從開發的觀點來看,這表示一些事項:

  • 請勿在埠不同之處註冊多個重新導向 URI。 登入伺服器會任意挑選一個 ,並使用與該重新導向 URI 相關聯的行為(例如,無論是 web-、 native-或 spa-type redirect)。

    當您想要在相同的應用程式註冊中使用不同的驗證流程時,這特別重要,例如授權碼授與和隱含流程。 若要將正確的回應行為與每個重新導向 URI 產生關聯,登入伺服器必須能夠區分重新導向 URI,而且當只有埠不同時,就無法這麼做。

  • 若要在localhost上註冊多個重新導向URI,以在開發期間測試不同的流程,請使用 URI的路徑 元件加以區分。 例如, http://localhost/MyWebApp 不符合 http://localhost/MyNativeApp

  • 目前不支援 IPv6 回送位址 ([::1])。

偏好使用 127.0.0.1 而不是 localhost

若要防止您的應用程式因為設定錯誤的防火牆或重新命名的網路介面而中斷,請使用重新導向 URI 中的 IP 常值回送位址 127.0.0.1 ,而不是 localhost。 例如: https://127.0.0.1

不過,您無法使用 Azure 入口網站 中的 [重新導向 URI] 文本框來新增使用 http 配置之回送式重新導向 URI:

Azure 入口網站 顯示不允許的 HTTP 回送重新導向 URI 時發生錯誤對話方塊

若要新增使用http配置與127.0.0.1回送位址的重新導向 URI,您目前必須在應用程式指令清單中修改 replyUrlsWithType 屬性。

重新導向 URI 中通配符的限制

像 這樣的 https://*.contoso.com 通配符 URI 似乎很方便,但應該避免因為安全性影響。 根據 OAuth 2.0 規格(RFC 6749 的第 3.1.2 節),重新導向端點 URI 必須是絕對 URI。 因此,當設定的通配符 URI 符合重新導向 URI 時,會移除重新導向 URI 中的查詢字串和片段。

設定為登入個人 Microsoft 帳戶和公司或學校帳戶的應用程式註冊目前不支援通配符 URI。 不過,允許通配符 URI 用於設定為只在組織的 Microsoft Entra 租使用者中登入公司或學校帳戶的應用程式。

若要將具有通配符的重新導向 URI 新增至登入公司或學校帳戶的應用程式註冊,請使用 Azure 入口網站 中 應用程式註冊 的應用程式指令清單編輯器。 雖然您可以使用指令清單編輯器來設定使用通配符的重新導向 URI,但 強烈建議 您遵守 RFC 6749 的第 3.1.2 節。 和只使用絕對 URI。

如果您的案例需要比允許的最大限制更多的重新導向 URI,請考慮下列狀態參數方法,而不是新增通配符重新導向 URI。

使用狀態參數

如果您有數個子域,而且您的案例需要,在成功驗證時,您會使用狀態參數將使用者重新導向至他們啟動所在的相同頁面。

在此方法中:

  1. 為每個應用程式建立「共用」重新導向 URI,以處理您從授權端點收到的安全性令牌。
  2. 您的應用程式可以在狀態參數中傳送應用程式特定參數(例如使用者源自的子域 URL 或商標資訊之類的任何專案)。 使用狀態參數時,請防範 RFC 6749 第 10.12 節中指定的 CSRF 保護。
  3. 應用程式特定參數包含應用程式為使用者呈現正確體驗所需的所有資訊,也就是建構適當的應用程式狀態。 Microsoft Entra 授權端點會從狀態參數移除 HTML,因此請確定您未在此參數中傳遞 HTML 內容。
  4. 當 Microsoft Entra ID 傳送回應至「共用」重新導向 URI 時,它會將狀態參數傳回應用程式。
  5. 然後,應用程式可以使用 state 參數中的 值來判斷要進一步傳送使用者的 URL。 請確定您已驗證 CSRF 保護。

警告

此方法可讓遭入侵的用戶端修改狀態參數中傳送的其他參數,藉此將使用者重新導向至不同的 URL,這是 RFC 6819 中所述的開啟重新導向器威脅 。 因此,客戶端必須藉由加密狀態或透過其他方式驗證這些參數,例如驗證重新導向 URI 中的功能變數名稱,以針對令牌進行驗證。

下一步

瞭解應用程式註冊 應用程式指令清單