將 OWIN 型 Web API 遷移至 b2clogin.com 或自定義網域

這很重要

自 2025 年 5 月 1 日起,Azure AD B2C 將不再可供新客戶購買。 在我們的常見問題中深入瞭解。

本文說明在實作 .NET 開放 Web 介面的 Web API 中啟用多個令牌簽發者支持的技術。 當您將 Azure Active Directory B2C (Azure AD B2C) API 及其應用程式從一個網域移轉至另一個網域時,支援多個令牌端點很有用。 例如,從 login.microsoftonline.com 到 b2clogin.com 或 自定義網域。

藉由在 API 中新增支援,以接受 b2clogin.com、login.microsoftonline.com 或自定義網域所簽發的令牌,您可以先分階段移轉 Web 應用程式,再從 API 移除對 login.microsoftonline.com 發行令牌的支援。

下列各節將示範如何在使用 Microsoft OWIN 中間件元件 (Katana) 的 Web API 中啟用多個簽發者。 雖然程式代碼範例專屬於 Microsoft OWIN 中間件,但一般技術應該適用於其他 OWIN 連結庫。

先決條件

您需要下列 Azure AD B2C 資源,才能繼續進行本文中的步驟:

取得令牌簽發者端點

您首先需要取得想要在 API 中支援的每個發行者的令牌端點 URI。 若要取得 Azure AD B2C 租用戶支援的 b2clogin.com 和 login.microsoftonline.com 端點,請在 Azure 入口網站中使用下列程式。

從選取其中一個現有的使用者流程開始:

  1. 在 Azure 入口網站中瀏覽至您的 Azure AD B2C 租戶

  2. 在 [原則] 底下,選取 [使用者流程(原則)]

  3. 選取現有的原則,例如 B2C_1_signupsignin1,然後選取執行使用者流程

  4. 在頁面頂端附近的 [ 執行使用者流程 ] 標題底下,選取超連結以流覽至該使用者流程的 OpenID Connect 探索端點。

    Azure 入口網站 [立即執行] 頁面中的已知 URI 超連結

  5. 在瀏覽器中開啟的頁面中,記錄 issuer 值,例如:

    https://your-b2c-tenant.b2clogin.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/

  6. 使用 [ 選取網域 ] 下拉式清單選取另一個網域,然後再次執行上述兩個步驟並記錄其 issuer 值。

您現在應該會記錄兩個類似以下的 URI:

https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/
https://your-b2c-tenant.b2clogin.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/

自訂原則

如果您有自訂政策而非使用者流程,您可以使用類似的方法來取得簽發者 URI。

  1. 流覽至您的 Azure AD B2C 租使用者
  2. 選取 [身分識別體驗架構]
  3. 選取其中一個信賴方政策,例如 B2C_1A_signup_signin
  4. 使用 [ 選取網域 ] 下拉式清單來選取網域,例如 yourtenant.b2clogin.com
  5. 選取 OpenID Connect 探索端點底下顯示的超連結
  6. issuer記錄值
  7. 針對其他網域執行步驟 4-6,例如 login.microsoftonline.com

取得範例程式碼

既然您都有這兩個令牌端點 URI,您必須更新程序代碼,以指定這兩個端點都是有效的簽發者。 若要逐步解說範例,請下載或複製範例應用程式,然後更新範例以支援這兩個端點作為有效的簽發者。

下載封存: active-directory-b2c-dotnet-webapp-and-webapi-master.zip

git clone https://github.com/Azure-Samples/active-directory-b2c-dotnet-webapp-and-webapi.git

在 Web API 中啟用多個簽發者

在本節中,您會更新程序代碼,以指定這兩個令牌簽發者端點都有效。

  1. 在 Visual Studio 中開啟 B2C-WebAPI-DotNet.sln 解決方案

  2. 在 TaskService 專案中,開啟編輯器中的 TaskService\App_Start\Startup.Auth.cs 檔案

  3. 將下列 using 指示詞新增至檔案頂端:

    using System.Collections.Generic;

  4. 將 ValidIssuers 屬性新增至TokenValidationParameters 定義中,並指定您在上一節中記錄的兩個 URI:

    TokenValidationParameters tvps = new TokenValidationParameters
    {
        // Accept only those tokens where the audience of the token is equal to the client ID of this app
        ValidAudience = ClientId,
        AuthenticationType = Startup.DefaultPolicy,
        ValidIssuers = new List<string> {
            "https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/",
            "https://{your-b2c-tenant}.b2clogin.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/"//,
            //"https://your-custom-domain/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/"
        }
    };
    

TokenValidationParameters由 MSAL.NET 提供,並在下一節的程式碼中由 OWIN 中間件取用於Startup.Auth.cs。 指定多個有效的簽發者時,OWIN 應用程式管線會察覺這兩個令牌端點都是有效的簽發者。

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
{
    // This SecurityTokenProvider fetches the Azure AD B2C metadata &  from the OpenID Connect metadata endpoint
    AccessTokenFormat = new JwtFormat(tvps, new tCachingSecurityTokenProvider(String.Format(AadInstance, ultPolicy)))
});

如先前所述,其他 OWIN 函式庫通常會提供類似的功能來支援多個簽發者。 雖然提供每個連結庫的範例不在本文的範圍之外,但您可以針對大部分的連結庫使用類似的技術。

切換 Web 應用程式中的端點

現在,您的 Web API 已支援這兩個 URI,您需要更新您的 Web 應用程式,以便從 b2clogin.com 取得存取權杖。

例如,您可以藉由修改 ida:AadInstanceTaskWebApp\Web.config檔案中的 值,將範例 Web 應用程式設定為使用新的端點。

將 TaskWebApp 中 ida:AadInstance 的 值變更,使其指向 {your-b2c-tenant-name}.b2clogin.com 而不是 login.microsoftonline.com。

以前:

<!-- Old value -->
<add key="ida:AadInstance" value="https://login.microsoftonline.com/tfp/{0}/{1}" />

之後 (以 B2C 租使用者的名稱取代 {your-b2c-tenant} ):

<!-- New value -->
<add key="ida:AadInstance" value="https://{your-b2c-tenant}.b2clogin.com/tfp/{0}/{1}" />

在 Web 應用程式執行期間建構端點字串時,會在要求令牌時使用以 b2clogin.com 為基礎的端點。

使用自訂網域時:

<!-- Custom domain -->
<add key="ida:AadInstance" value="https://custom-domain/{0}/{1}" />

後續步驟

本文介紹了一種配置 Web API 的方法,實現 Microsoft OWIN 中介軟體(Katana),以接受來自多個發行端點的 token。 如您所注意到,當您想要針對您自己的租用戶建置和執行這些專案時,TaskService 和 TaskWebApp 專案的 Web.Config 檔案中有數個其他字串需要變更。 歡迎您適當地修改專案以查看專案的運作,不過,完整的逐步解說會超出本文的範圍。

如需 Azure AD B2C 所發出之不同安全性令牌類型的詳細資訊,請參閱 Azure Active Directory B2C 中的令牌概觀。