將 OWIN 型的 Web API 移轉到 b2clogin.com 或自訂網域

本文描述在實作 Open Web Interface for .NET (OWIN) 的 Web API 中為多個權杖簽發者啟用支援的技術。 當將 Azure Active Directory B2C (Azure AD B2C) API 及其應用程式從一個網域移轉到另一個網域時,支援多個權杖端點會很實用。 例如,從 login.microsoftonline.comb2clogin.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.comlogin.microsoftonline.com 端點,請在 Azure 入口網站中使用下列程序。

首先,選取現有使用者流程的其中一個:

  1. Azure 入口網站中,巡覽至 Azure AD B2C 租用戶

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

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

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

    Well-known URI hyperlink in the Run now page of the Azure portal

  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. 對其他網域 (例如 login.microsoftonline.com) 執行步驟 4-6

取得範例程式碼

有了兩個權杖端點 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 端點擷取權杖。

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

變更 TaskWebApp 之 Web.config 中的 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}" />

之後 (將 {your-b2c-tenant} 更換成 B2C 租用戶名稱):

<!-- 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) 的方法,以接受來自多個簽發者端點的權杖。 您可能會注意到,如果想要針對自己的租用戶建置並執行這些專案,則 TaskService 和 TaskWebApp 專案的 Web.Config 檔案中可能還有其他幾個字串需要變更。 如果您想要查看這些專案的實際運作情況,歡迎您適當地修改這些專案;不過,本文不提供完整的操作逐步解說。

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