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

重新導向 URI 或回覆 URL 是指當應用程式成功授權並授與授權碼或存取權杖時,授權伺服器會將使用者傳送過去的位置。 授權伺服器會傳送程式碼或權杖至重新導向 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 數目上限

下表顯示您可以在Microsoft 身分識別平臺中新增至應用程式註冊的重新導向 URI 數目上限。

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

基於 安全性考慮 ,無法引發重新導向 URI 的最大數目。 如果您的案例需要比允許的最大限制更多的重新導向 URI,請考慮使用下列 狀態參數方法 作為解決方案。

URI 長度上限

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

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

  • 一律只將重新導向 URI 新增至應用程式物件。
  • 請勿將重新導向 URI 值新增至服務主體,因為當服務主體物件與應用程式物件同步時,可能會移除這些值。 觸發兩個物件之間進行同步的任何更新,都可能造成這種情況。

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

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

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

應用程式註冊登入物件 支援重新導向 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.3 7.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:

Error dialog in Azure portal showing disallowed http-based loopback redirect 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 中的功能變數名稱,以針對權杖進行驗證。

下一步

瞭解應用程式註冊 應用程式資訊清單