將 OWIN 型的 Web API 移轉到 b2clogin.com 或自訂網域
本文描述在實作 Open Web Interface for .NET (OWIN) 的 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 入口網站中使用下列程序。
首先,選取現有使用者流程的其中一個:
在 Azure 入口網站中,巡覽至 Azure AD B2C 租用戶
在 [原則] 下,選取 [使用者流程 (原則)]
選取現有原則 (例如 B2C_1_signupsignin1),然後選取 [執行使用者流程]
在接近頁面頂端的執行使用者流程標題下,選取超連結以巡覽至該使用者流程的 OpenID Connect 探索端點。
在瀏覽器中開啟的頁面上,記錄
issuer
值,例如:https://your-b2c-tenant.b2clogin.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/v2.0/
使用 [選取網域] 下拉式清單選取其他網域,然後再次執行前兩個步驟,並記下其
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。
- 巡覽至 Azure AD B2C 租用戶
- 選取 [識別體驗架構]
- 選取信賴憑證者原則的其中一個,例如 B2C_1A_signup_signin
- 使用 [選取網域] 下拉式清單來選取網域,例如 yourtenant.b2clogin.com
- 選取 OpenID Connect 探索端點下顯示的超連結
- 記下
issuer
值 - 對其他網域 (例如 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 中啟用多個簽發者
在本節中,您會更新程式碼,以指定兩個權杖簽發者端點都是有效。
在 Visual Studio 中開啟 B2C-WebAPI-DotNet.sln 解決方案
在 TaskService 專案中,以編輯器開啟 TaskService\App_Start\Startup.Auth.cs 檔案
將下列
using
指示詞新增至檔案的頂端:using System.Collections.Generic;
將
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 的權杖概觀。