Migrace webového rozhraní API založeného na OWIN do b2clogin.com nebo vlastní domény

Tento článek popisuje techniku pro povolení podpory více vystavitelů tokenů ve webových rozhraních API, která implementují open web rozhraní pro .NET (OWIN). Podpora více koncových bodů tokenů je užitečná při migraci rozhraní API Azure Active Directory B2C (Azure AD B2C) a jejich aplikací z jedné domény do jiné. Například z login.microsoftonline.com do b2clogin.com nebo do vlastní domény.

Přidáním podpory v rozhraní API pro příjem tokenů vydaných b2clogin.com, login.microsoftonline.com nebo vlastní doménou můžete webové aplikace migrovat fázovaným způsobem předtím, než z rozhraní API odeberete podporu tokenů vydaných login.microsoftonline.com.

Následující části představují příklad povolení více vystavitelů ve webovém rozhraní API, které používá komponenty middlewaru Microsoft OWIN (Katana). I když jsou příklady kódu specifické pro middleware Microsoft OWIN, obecná technika by měla platit i pro ostatní knihovny OWIN.

Požadavky

Než budete pokračovat v postupu v tomto článku, budete potřebovat následující Azure AD prostředky B2C:

Získání koncových bodů vystavitele tokenu

Nejprve musíte získat identifikátory URI koncového bodu vystavitele tokenu pro každého vystavitele, kterého chcete ve svém rozhraní API podporovat. Pokud chcete získat koncové body b2clogin.com a login.microsoftonline.com podporované vaším tenantem Azure AD B2C, použijte v Azure Portal následující postup.

Začněte tím, že vyberete jeden ze stávajících toků uživatelů:

  1. V Azure Portal přejděte do tenanta Azure AD B2C.

  2. V části Zásady vyberte Toky uživatelů (zásady).

  3. Vyberte existující zásadu, například B2C_1_signupsignin1, a pak vyberte Spustit tok uživatele.

  4. Pod nadpisem Spustit tok uživatele v horní části stránky vyberte hypertextový odkaz a přejděte na koncový bod zjišťování OpenID Connect pro daný tok uživatele.

    Dobře známý hypertextový odkaz URI na stránce Spustit v Azure Portal

  5. Na stránce, která se otevře v prohlížeči, si poznamenejte issuer hodnotu, například:

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

  6. Pomocí rozevíracího seznamu Vybrat doménu vyberte druhou doménu a pak znovu proveďte předchozí dva kroky a poznamenejte si její issuer hodnotu.

Teď byste měli mít zaznamenané dva identifikátory URI, které jsou podobné:

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

Vlastní zásady

Pokud máte místo toků uživatelů vlastní zásady, můžete k získání identifikátorů URI vystavitele použít podobný postup.

  1. Přejděte do tenanta Azure AD B2C.
  2. Výběr architektury prostředí identit
  3. Vyberte jednu ze zásad předávající strany, například B2C_1A_signup_signin
  4. Pomocí rozevíracího seznamu Vybrat doménu vyberte doménu, například yourtenant.b2clogin.com
  5. Vyberte hypertextový odkaz zobrazený v části Koncový bod zjišťování OpenID Connect.
  6. Poznamenejte si hodnotu.issuer
  7. Proveďte kroky 4 až 6 pro druhou doménu, například login.microsoftonline.com

Získání ukázkového kódu

Teď, když máte oba identifikátory URI koncového bodu tokenu, musíte aktualizovat kód tak, aby určil, že oba koncové body jsou platnými vystaviteli. Pokud si chcete projít příklad, stáhněte nebo naklonujte ukázkovou aplikaci a pak ukázku aktualizujte tak, aby podporovala oba koncové body jako platné vystavitele.

Stáhnout archiv: active-directory-b2c-dotnet-webapp-and-webapi-master.zip

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

Povolení více vystavitelů ve webovém rozhraní API

V této části aktualizujete kód tak, aby určil, že oba koncové body vystavitele tokenu jsou platné.

  1. Otevřete řešení B2C-WebAPI-DotNet.sln v sadě Visual Studio.

  2. V projektu TaskService otevřete v editoru soubor TaskService\App_Start\Startup.Auth.cs .

  3. Na začátek souboru přidejte následující using direktivu:

    using System.Collections.Generic;

  4. ValidIssuers Přidejte vlastnost do TokenValidationParameters definice a zadejte oba identifikátory URI, které jste si poznamenali v předchozí části:

    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 poskytuje MSAL.NET a využívá ho middleware OWIN v další části kódu v souboru Startup.Auth.cs. Při zadání několika platných vystavitelů je kanál aplikace OWIN informován o tom, že oba koncové body tokenu jsou platnými vystaviteli.

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)))
});

Jak už bylo zmíněno dříve, jiné knihovny OWIN obvykle poskytují podobné možnosti pro podporu více vystavitelů. Ačkoli poskytnutí příkladů pro každou knihovnu je mimo rozsah tohoto článku, můžete použít podobnou techniku pro většinu knihoven.

Přepnutí koncových bodů ve webové aplikaci

Protože vaše webové rozhraní API teď podporuje oba identifikátory URI, potřebujete aktualizovat webovou aplikaci tak, aby načítala tokeny z koncového bodu b2clogin.com.

Ukázkovou webovou aplikaci můžete například nakonfigurovat tak, aby používala nový koncový bod, ida:AadInstance úpravou hodnoty v souboru TaskWebApp\Web.config projektu TaskWebApp.

ida:AadInstance Změňte hodnotu v Web.config TaskWebApp tak, aby odkazovat místo {your-b2c-tenant-name}.b2clogin.comlogin.microsoftonline.comna .

Před:

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

Za (nahraďte {your-b2c-tenant} názvem vašeho tenanta B2C):

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

Při vytváření řetězců koncových bodů během provádění webové aplikace se při vyžádání tokenů použijí koncové body založené na b2clogin.com.

Při použití vlastní domény:

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

Další kroky

Tento článek představuje metodu konfigurace webového rozhraní API, které implementuje middleware Microsoft OWIN (Katana) pro příjem tokenů z více koncových bodů vystavitele. Jak si můžete všimnout, v Web.Config souborech projektů TaskService i TaskWebApp je několik dalších řetězců, které by bylo potřeba změnit, pokud chcete tyto projekty sestavit a spustit pro vlastního tenanta. Pokud chcete projekty zobrazit v akci, můžete je vhodně upravit, ale úplný návod k tomu není součástí tohoto článku.

Další informace o různých typech tokenů zabezpečení generovaných Azure AD B2C najdete v tématu Přehled tokenů v Azure Active Directory B2C.