啟用 Azure Active Directory B2C 的自定義網域

開始之前,請使用 [選擇原則類型 選取器] 來選擇您要設定的原則類型。 Azure Active Directory B2C 提供兩種方法來定義使用者如何與您的應用程式互動:透過預先 定義的使用者流程 ,或透過完全可設定 的自定義原則。 本文中每個方法所需的步驟都不同。

本文說明如何在 Azure Active Directory B2C (Azure AD B2C) 的重新導向 URL 中啟用自定義網域。 藉由使用已驗證的自定義網域,您有下列優點:

  • 它提供更順暢的用戶體驗。 從用戶的觀點來看,他們會在登入程式期間保留在網域中,而不是重新導向至 Azure AD B2C 預設網域 <租用戶名稱>.b2clogin.com

  • 藉由在登入期間留在應用程式的相同網域中,您可以降低第三方 Cookie 封鎖的影響

  • 您可以將 Azure AD B2C 租使用者中建立的物件數目從預設的 125 萬個增加到 525 萬個。

Screenshot demonstrates an Azure AD B2C custom domain user experience.

自定義網域概觀

您可以使用 Azure Front Door 為 Azure AD B2C 啟用自定義網域。 Azure Front Door 是一個全域進入點,使用 Microsoft 全球邊緣網路來建立快速、安全且可廣泛擴充的 Web 應用程式。 您可以在 Azure Front Door 後方轉譯 Azure AD B2C 內容,然後在 Azure Front Door 中設定選項,以透過應用程式 URL 中的自定義網域傳遞內容。

觀看這段影片以瞭解 Azure AD B2C 自定義網域。

下圖說明 Azure Front Door 整合:

  1. 使用者從應用程式選取 [登入] 按鈕,將他們帶到 Azure AD B2C 登入頁面。 此頁面會指定自定義功能變數名稱。
  2. 網頁瀏覽器會將自定義功能變數名稱解析為 Azure Front Door IP 位址。 在 DNS 解析期間,具有自定義功能變數名稱的正式名稱 (CNAME) 記錄會指向您的 Front Door 預設前端主機 (例如 , contoso-frontend.azurefd.net)。
  3. 尋址至自訂網路網域 (例如, login.contoso.com) 的流量會路由傳送至指定的 Front Door 預設前端主機 (contoso-frontend.azurefd.net)。
  4. Azure Front Door 會使用 Azure AD B2C 預設網域叫用 Azure AD B2C <tenant-name>.b2clogin.com 內容。 對 Azure AD B2C 端點的要求包含原始自定義功能變數名稱。
  5. Azure AD B2C 會藉由顯示相關內容和原始自定義網域來回應要求。

Diagram shows the custom domain networking flow.

重要

從瀏覽器到 Azure Front Door 的連線應該一律使用 IPv4,而不是 IPv6。

使用自訂網域時,請考慮下列事項:

  • 您可以設定多個自訂網域。 如需支援的自定義網域數目上限,請參閱 Azure AD B2C 和 Azure 訂用帳戶和服務限制的 Microsoft Entra 服務限制、配額和 Azure Front Door 的限制。
  • Azure Front Door 是個別的 Azure 服務,因此會產生額外費用。 如需詳細資訊,請參閱 Front Door 定價
  • 設定自定義網域之後,使用者仍然可以存取 Azure AD B2C 預設功能變數名稱 tenant-name.b2clogin.com>(除非您使用自定義原則並封鎖存取。<
  • 如果您有多個應用程式,請將所有應用程式移轉至自定義網域,因為瀏覽器會將 Azure AD B2C 會話儲存在目前使用的功能變數名稱之下。

必要條件

步驟 1:將自定義功能變數名稱新增至您的 Azure AD B2C 租使用者

每個新的 Azure AD B2C 租使用者都隨附初始功能變數名稱 <domainname.onmicrosoft.com>。 您無法變更或刪除初始功能變數名稱,但可以新增自訂網域。

請遵循下列步驟,將自定義網域新增至您的 Azure AD B2C 租使用者:

  1. 將自定義功能變數名稱新增至 Microsoft Entra ID

    重要

    針對這些步驟,請務必登入您的 Azure AD B2C 租用戶,然後選取 Microsoft Entra ID 服務。

  2. 將 DNS 資訊新增至網域註冊機構。 將自定義功能變數名稱新增至 Microsoft Entra ID 之後,請為您的網域建立 DNS TXTMX 記錄。 為您的網域建立此 DNS 記錄會驗證功能變數名稱的擁有權。

    下列範例示範 login.contoso.comaccount.contoso.com 的 TXT 記錄

    名稱(主機名稱) 類型 資料
    login TXT MS=ms12345678
    帳戶 TXT MS=ms87654321

    TXT 記錄必須與網域的子域或主機名相關聯。 例如,contoso.com 網域的登入部分。 如果主機名是空的 或 @,則 Microsoft Entra ID 將無法驗證您新增的自定義網域。 在下列範例中,這兩筆記錄都設定不正確。

    名稱(主機名稱) 類型 資料
    TXT MS=ms12345678
    @ TXT MS=ms12345678

    提示

    您可以使用任何公開可用的 DNS 服務來管理自定義網域,例如 GoDaddy。 如果您沒有 DNS 伺服器,您可以使用 Azure DNS 區域App Service 網域

  3. 確認您的自定義功能變數名稱。 確認您打算使用的每個子域或主機名。 例如,若要能夠使用 login.contoso.com 和 account.contoso.com 登入,您必須驗證子域,而不只是最上層網域 contoso.com

    重要

    驗證網域之後, 請刪除 您建立的 DNS TXT 記錄。

步驟 2:建立新的 Azure Front Door 實例

請遵循下列步驟來建立 Azure Front Door:

  1. 登入 Azure 入口網站

  2. 若要選擇包含您想要用於 Azure Front Door 之 Azure 訂用帳戶的目錄,而不是包含 Azure AD B2C 租使用者的目錄,請選取頂端功能表中的 設定 圖示,從 [目錄 + 訂用帳戶] 功能表切換至您的 Azure AD B2C 租使用者。

  3. 請遵循建立 Front Door 配置檔 - 快速建立中的步驟,使用下列設定為您的 Azure AD B2C 租使用者建立 Front Door:

    機碼
    訂用帳戶 選取 Azure 訂閱。
    資源群組 選取現有的資源群組或建立新群組。
    名稱 提供設定檔的名稱,例如 b2cazurefrontdoor
    選取 [標準] 或 [進階版 層]。 標準層已優化內容傳遞。 進階版 層建置在標準層上,並著重於安全性。 請參閱 階層比較
    端點名稱 輸入端點的全域唯一名稱,例如 b2cazurefrontdoor。 端點 主機名 會自動產生。
    來源類型 選取 Custom
    原始主機名稱 輸入 <tenant-name>.b2clogin.com<tenant-name>取代為您的 Azure AD B2C 租使用者名稱, 例如 contoso.b2clogin.com

    將快 WAF 原則 保留空白。

  4. 建立 Azure Front Door 資源之後,請選取 [ 概觀],然後複製 端點主機名。 其看起來像 b2cazurefrontdoor-ab123e.z01.azurefd.net

  5. 請確定 來源的主機名稱原始主機標頭 具有相同的值:

    1. 在 [設定] 底,選取 [來源群組]。
    2. 從清單中選取您的原始群組,例如 default-origin-group
    3. 在右窗格中,選取您的 [原始主機名 ],例如 contoso.b2clogin.com
    4. 在 [更新原始來源] 窗格中,更新 [主機名] 和 [來源主機標頭] 具有相同的值。

    Screenshot of how to update custom domain origins.

步驟 3:在 Azure Front Door 上設定您的自定義網域

在此步驟中,您會將您在步驟 1註冊的自定義網域新增至 Azure Front Door。

3.1. 建立 CNAME DNS 記錄

若要新增自定義網域,請使用您的網域提供者建立標準名稱 (CNAME) 記錄。 CNAME 記錄是一種 DNS 記錄類型,會將來源功能變數名稱對應至目的地功能變數名稱(別名)。 針對 Azure Front Door,來源功能變數名稱是您的自訂功能變數名稱,而目的地功能變數名稱是您在步驟 2 中設定的 Front Door 預設主機名。建立新的 Azure Front Door 實例。 例如: b2cazurefrontdoor-ab123e.z01.azurefd.net

在 Front Door 驗證您所建立的 CNAME 記錄之後,尋址至來源自定義網路變數的流量會 login.contoso.com路由傳送至指定的目的地 Front Door 預設前端主機,例如 contoso-frontend.azurefd.net。 如需詳細資訊,請參閱 將自定義網域新增至 Front Door

若要為您的自訂網域建立 CNAME 記錄:

  1. 登入您自定義網域之網域提供者的網站。

  2. 藉由諮詢提供者的檔,或搜尋標示 為 [功能變數名稱]、 [DNS] 或 [名稱伺服器管理] 的網站區域,尋找管理 DNS 記錄的頁面。

  3. 為您的自定義網域建立 CNAME 記錄專案並完成欄位,如下表所示(功能變數名稱可能有所不同):

    來源 類型 Destination
    <login.contoso.com> CNAME contoso-frontend.azurefd.net
    • 來源:輸入您的自定義功能變數名稱(例如,login.contoso.com)。

    • 輸入:輸入 CNAME

    • 目的地:輸入您在步驟 2建立的預設 Front Door 前端主機。 它必須是下列格式:hostname.azurefd.net>。< 例如: contoso-frontend.azurefd.net

  4. 儲存您的變更。

3.2. 將自定義網域與您的 Front Door 產生關聯

  1. 在 Azure 入口網站 首頁中,搜尋並選取 myb2cazurefrontdoor Azure Front Door 資源加以開啟。

  2. 在左側功能表中的 [設定] 下,選取 [網域]。

  3. 選取 [新增網域]。

  4. 針對 [DNS 管理],選取 [所有其他 DNS 服務]。

  5. 針對[ 自訂網域],輸入您的自訂網域,例如 login.contoso.com

  6. 將其他值保留為預設值,然後選取 [ 新增]。 您的自訂網域會新增至清單。

  7. 您剛才新增之網域的 [驗證狀態 ] 下,選取 [ 擱置]。 隨即開啟具有 TXT 記錄資訊的窗格。

    1. 登入您自定義網域之網域提供者的網站。

    2. 藉由諮詢提供者的檔,或搜尋標示 為 [功能變數名稱]、 [DNS] 或 [名稱伺服器管理] 的網站區域,尋找管理 DNS 記錄的頁面。

    3. 建立新的 TXT DNS 記錄並完成欄位,如下所示:

      1. 名稱: _dnsauth.contoso.com,但您必須只 _dnsauth輸入 。
      2. 類型:TXT (英文)
      3. 值:類似 75abc123t48y2qrtsz2bvk......

      新增 TXT DNS 記錄之後,Front Door 資源中的驗證狀態最終會從 [擱置] 變更為 [已核准]。 您可能需要重載頁面,變更才能發生。

  8. 回到您的 Azure 入口網站。 在 您剛才新增之網域的 [端點關聯 ] 下,選取 [未關聯]。

  9. 針對 [ 選取端點],從下拉式清單中選取主機名端點。

  10. 針對 [ 選取路由 ] 列表,選取 [預設路由],然後選取 [ 關聯]。

3.3. 啟用路由

默認 路由 會將流量從用戶端路由傳送至 Azure Front Door。 然後,Azure Front Door 會使用您的設定將流量傳送至 Azure AD B2C。 請遵循下列步驟來啟用預設路由。

  1. 選取 [Front Door 管理員]。

  2. 若要新增啟用 預設路由,請先從 Front Door 管理員中的端點清單中展開端點。 然後,選取 預設路由

    下列螢幕快照顯示如何選取預設路由。

    Screenshot of selecting the default route.

  3. 選取 [ 啟用路由 ] 複選框。

  4. 選取 [ 更新] 以儲存變更。

步驟 4:設定 CORS

如果您使用 HTML 範本自定義 Azure AD B2C 使用者介面 ,則必須使用自訂網域設定 CORS

使用下列步驟設定跨原始來源資源分享的 Azure Blob 記憶體:

  1. Azure 入口網站中,瀏覽至您的儲存體帳戶。
  2. 在功能表中,選取 [CORS]。
  3. 針對 [允許的來源],輸入 https://your-domain-name。 將取代 your-domain-name 為您的功能變數名稱。 例如: https://login.contoso.com 。 輸入租用戶名稱時,請使用所有小寫字母。
  4. 針對 [允許的方法],選取 GETOPTIONS
  5. 針對 [允許的標頭],輸入星號 \。
  6. 針對 [公開的標頭],輸入星號 \。
  7. 針對 [ 最大年齡],輸入 200。
  8. 選取 [儲存]。

測試您的自定義網域

  1. 登入 Azure 入口網站

  2. 如果您有多個租使用者的存取權,請選取頂端功能表中的 [設定] 圖示,從 [目錄 + 訂用帳戶] 功能表切換至您的 Azure AD B2C 租使用者。

  3. 在 Azure 入口網站中,搜尋並選取 [Azure AD B2C]

  4. 在 [原則] 底下,選取 [使用者流程][原則]。

  5. 選取使用者流程,然後選取 [ 執行使用者流程]。

  6. 針對 [ 應用程式],選取您先前註冊的 Web 應用程式名為 webapp1 。 回覆 URL 應該會顯示 https://jwt.ms

  7. 複製 [執行使用者流程端點] 底下的 URL。

    Screenshot of how to copy the authorization request U R I.

  8. 若要模擬使用自定義網域登入,請開啟網頁瀏覽器,並使用您複製的URL。 將 Azure AD B2C 網域 (<tenant-name.b2clogin.com>) 取代為您的自定義網域。

    例如,不要這樣撰寫:

    https://contoso.b2clogin.com/contoso.onmicrosoft.com/oauth2/v2.0/authorize?p=B2C_1_susi&client_id=63ba0d17-c4ba-47fd-89e9-31b3c2734339&nonce=defaultNonce&redirect_uri=https%3A%2F%2Fjwt.ms&scope=openid&response_type=id_token&prompt=login
    

    使用:

    https://login.contoso.com/contoso.onmicrosoft.com/oauth2/v2.0/authorize?p=B2C_1_susi&client_id=63ba0d17-c4ba-47fd-89e9-31b3c2734339&nonce=defaultNonce&redirect_uri=https%3A%2F%2Fjwt.ms&scope=openid&response_type=id_token&prompt=login    
    
  9. 確認 Azure AD B2C 已正確載入。 然後,使用本機帳戶登入。

  10. 使用其餘的原則重複測試。

設定您的識別提供者

當用戶選擇使用社交識別提供者登入時,Azure AD B2C 會起始授權要求,並將使用者帶往選取的身分識別提供者來完成登入程式。 授權要求會 redirect_uri 指定具有 Azure AD B2C 預設網域名稱的 :

https://<tenant-name>.b2clogin.com/<tenant-name>/oauth2/authresp

如果您將原則設定為允許使用外部識別提供者登入,請使用自定義網域更新 OAuth 重新導向 URI。 大部分的識別提供者都可讓您註冊多個重新導向 URI。 建議您新增重新導向 URI,而不是取代它們,讓您可以測試自定義原則,而不會影響使用 Azure AD B2C 預設功能變數名稱的應用程式。

在下列重新導向 URI 中:

https://<custom-domain-name>/<tenant-name>/oauth2/authresp
  • 將 custom-domain-name> 取代<為您的自定義功能變數名稱。
  • 以您的租用戶名稱或租用戶標識碼取代 tenant-name>。<

下列範例顯示有效的 OAuth 重新導向 URI:

https://login.contoso.com/contoso.onmicrosoft.com/oauth2/authresp

如果您選擇使用 租使用者標識碼,有效的 OAuth 重新導向 URI 看起來會像下列範例:

https://login.contoso.com/11111111-1111-1111-1111-111111111111/oauth2/authresp

SAML 識別提供者元數據看起來會像下列範例:

https://<custom-domain-name>.b2clogin.com/<tenant-name>/<your-policy>/samlp/metadata?idptp=<your-technical-profile>

設定您的應用程式

設定及測試自定義網域之後,您可以更新應用程式以載入 URL,將自定義網域指定為主機名,而不是 Azure AD B2C 網域。

自定義網域整合適用於使用 Azure AD B2C 原則(使用者流程或自定義原則)來驗證使用者的驗證端點。 這些端點看起來可能像下列範例:

  • https://<custom-domain>/<tenant-name>/<policy-name>/v2.0/.well-known/openid-configuration

  • https://<custom-domain>/<tenant-name>/<policy-name>/oauth2/v2.0/authorize

  • https://<custom-domain>/<tenant-name>/<policy-name>/oauth2/v2.0/token

將:

SAML 服務提供者元數據可能看起來像下列範例:

https://custom-domain-name/tenant-name/policy-name/Samlp/metadata

(選擇性)使用租用戶標識碼

您可以將 URL 中的 B2C 租使用者名稱取代為您的租使用者識別碼 GUID,以便移除 URL 中 “b2c” 的所有參考。 您可以在 Azure 入口網站 的 B2C [概觀] 頁面中找到租使用者識別碼 GUID。 例如,將 https://account.contosobank.co.uk/contosobank.onmicrosoft.com/ 變更為 https://account.contosobank.co.uk/<tenant ID GUID>/

如果您選擇使用租使用者標識碼而非租用戶名稱,請務必據以更新識別提供者 OAuth 重新導向 URI 。 如需詳細資訊,請參閱 設定識別提供者

令牌發行

令牌簽發者名稱 (iss) 宣告會根據所使用的自定義網域變更。 例如:

https://<domain-name>/11111111-1111-1111-1111-111111111111/v2.0/

(選擇性)封鎖預設功能變數名稱的存取

新增自訂網域並設定應用程式之後,使用者仍然可以存取 <tenant-name.b2clogin.com> 網域。 若要防止存取,您可以設定原則,針對允許的網域清單檢查授權要求「主機名」。 主機名是出現在 URL 中的功能變數名稱。 主機名可透過 {Context:HostName}宣告解析程式取得。 然後,您可以呈現自定義錯誤訊息。

  1. 取得從 GitHub 檢查主機名的條件式存取原則範例。
  2. 在每個檔案中,將字串 yourtenant 取代為您的 Azure AD B2C 租用戶名稱。 例如,如果 B2C 租使用者的名稱是 contosob2c,則的所有實例 yourtenant.onmicrosoft.com 都會變成 contosob2c.onmicrosoft.com
  3. 依下列順序上傳原則檔案: B2C_1A_TrustFrameworkExtensions_HostName.xml ,然後 B2C_1A_signup_signin_HostName.xml上傳 。

(選擇性)Azure Front Door 進階設定

您可以使用 Azure Front Door 進階設定,例如 Azure Web 應用程式防火牆 (WAF)。 Azure WAF 提供 Web 應用程式的集中式保護,免於常見的惡意探索和弱點。

使用自訂網域時,請考慮下列幾點:

  • WAF 原則必須與 Azure Front Door 配置檔相同。 如需如何建立與 Azure Front Door 搭配使用的 WAF 原則的詳細資訊,請參閱 設定 WAF 原則
  • WAF 受控規則功能不受正式支持,因為它可能會導致誤判並防止合法要求通過,因此只有在符合您的需求時才使用 WAF 自定義規則。

疑難排解

Azure AD B2C 傳回找不到頁面錯誤

  • 徵兆 - 您設定自定義網域,但當您嘗試使用自定義網域登入時,會收到 HTTP 404 錯誤訊息。
  • 可能的原因 - 此問題可能與 DNS 設定或 Azure Front Door 後端設定有關。
  • 解決方案
    • 請確定已在 Azure AD B2C 租用戶中註冊並成功驗證自定義網域
    • 請確定 自定義網域 已正確設定。 CNAME自定義網域的記錄必須指向您的 Azure Front Door 預設前端主機(例如,contoso-frontend.azurefd.net)。

我們的服務目前無法使用

  • 徵兆 - 您設定自訂網域,但當您嘗試使用自定義網域登入時,您會收到下列錯誤訊息: 我們的服務目前無法使用。我們正在儘快還原所有服務。請很快回來查看。

  • 可能的原因 - 此問題可能與 Azure Front Door 路由設定有關。

  • 解決方案:檢查預設路由的狀態。 如果已停用, 請啟用路由。 下列螢幕快照顯示預設路由的外觀:

    Screenshot of the status of the default-route.

Azure AD B2C 會傳回您要尋找的資源已被移除、其名稱已變更或暫時無法使用。

  • 徵兆 - 您設定自訂網域,但當您嘗試使用自定義網域登入時,您會取得 所要尋找的資源已被移除、其名稱已變更,或暫時無法使用 錯誤訊息。
  • 可能的原因 - 此問題可能與 Microsoft Entra 自定義網域驗證有關。
  • 解決方案:請確定自定義網域已在 Azure AD B2C 租用戶中註冊並 成功驗證

識別提供者傳回錯誤

  • 徵兆 - 設定自定義網域之後,您就可以使用本機帳戶登入。 但是,當您使用來自外部 社交或企業識別提供者的認證登入時,識別提供者會顯示錯誤訊息。
  • 可能的原因 - 當 Azure AD B2C 讓使用者使用同盟識別提供者登入時,它會指定重新導向 URI。 重新導向 URI 是識別提供者傳回令牌的端點。 重新導向 URI 與您應用程式搭配授權要求使用的網域相同。 如果重新導向 URI 尚未在識別提供者中註冊,它可能不會信任新的重新導向 URI,這會導致錯誤訊息。
  • 解決方案 - 請遵循設定識別提供者中的步驟來新增重新導向 URI。

常見問題集

當我使用 [立即執行] 嘗試執行原則時,為什麼看不到自定義網域?

複製URL、手動變更功能變數名稱,然後將它貼回您的瀏覽器。

Azure AD B2C 會顯示哪個 IP 位址? 使用者的IP位址或 Azure Front Door IP 位址?

Azure Front Door 會傳遞使用者的原始 IP 位址。 這是您在稽核報告或自定義原則中看到的IP位址。

重要

如果客戶端將標頭傳送x-forwarded-for至 Azure Front Door,Azure AD B2C 會使用原始程式x-forwarded-for作為使用者條件式存取評估的 IP 位址{Context:IPAddress}宣告解析程式

我可以搭配 B2C 使用第三方 Web 應用程式防火牆 (WAF) 嗎?

是,Azure AD B2C 支援 BYO-WAF(自備 Web 應用程式防火牆)。 不過,您必須測試 WAF,以確保它不會封鎖或警示對 Azure AD B2C 使用者流程或自定義原則的合法要求。 瞭解如何使用 Azure AD B2C 設定 Akamai WAFCloudflare WAF

我的 Azure Front Door 實例可以裝載在與 Azure AD B2C 租使用者不同的訂用帳戶中嗎?

是,Azure Front Door 可以位於不同的訂用帳戶中。

下一步

瞭解 OAuth 授權要求