Migrera ett OWIN-baserat webb-API till b2clogin.com eller en anpassad domän

Den här artikeln beskriver en teknik för att aktivera stöd för flera token utfärdare i webb-API:er som implementerar Open Web Interface for .NET (OWIN). Stöd för flera tokenslutpunkter är användbart när du migrerar API:er för Azure Active Directory B2C (Azure AD B2C) och deras program från en domän till en annan. Till exempel från login.microsoftonline.com till b2clogin.com eller till en anpassad domän.

Genom att lägga till stöd i ditt API för att acceptera token som utfärdats av b2clogin.com, login.microsoftonline.com eller en anpassad domän kan du migrera dina webbprogram stegvis innan du tar bort stöd för login.microsoftonline.com-utfärdade token från API:et.

Följande avsnitt innehåller ett exempel på hur du aktiverar flera utfärdare i ett webb-API som använder Microsoft OWIN-mellanprogramkomponenterna (Katana). Även om kodexemplen är specifika för Microsoft OWIN-mellanprogrammet bör den allmänna tekniken gälla för andra OWIN-bibliotek.

Förutsättningar

Du behöver följande Azure AD B2C-resurser innan du fortsätter med stegen i den här artikeln:

Hämta slutpunkter för token utfärdare

Du måste först hämta slutpunkts-URI:erna för token utfärdaren för varje utfärdare som du vill stödja i ditt API. Använd följande procedur i Azure Portal för att hämta b2clogin.com och login.microsoftonline.com slutpunkter som stöds av din Azure AD B2C-klientorganisation.

Börja med att välja ett av dina befintliga användarflöden:

  1. Gå till din Azure AD B2C-klientorganisation i Azure Portal

  2. Under Principer väljer du Användarflöden (principer)

  3. Välj en befintlig princip, till exempel B2C_1_signupsignin1 och välj sedan Kör användarflöde

  4. Under rubriken Kör användarflöde längst upp på sidan väljer du hyperlänken för att navigera till OpenID Connect-identifieringsslutpunkten för användarflödet.

    Välkänd URI-hyperlänk på sidan Kör nu i Azure Portal

  5. På sidan som öppnas i webbläsaren registrerar du värdet issuer , till exempel:

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

  6. Använd listrutan Välj domän för att välja den andra domänen och utför sedan de föregående två stegen igen och registrera dess issuer värde.

Nu bör två URI:er registreras som liknar:

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

Anpassade principer

Om du har anpassade principer i stället för användarflöden kan du använda en liknande process för att hämta utfärdarens URI:er.

  1. Gå till din Azure AD B2C-klientorganisation
  2. Välj Identity Experience Framework
  3. Välj en av dina principer för förlitande part, till exempel B2C_1A_signup_signin
  4. Använd listrutan Välj domän för att välja en domän, till exempel yourtenant.b2clogin.com
  5. Välj hyperlänken som visas under OpenID Connect-identifieringsslutpunkten
  6. Registrera värdet issuer
  7. Utför steg 4–6 för den andra domänen, till exempel login.microsoftonline.com

Hämta exempelkoden

Nu när du har båda tokenslutpunkts-URI:er måste du uppdatera koden för att ange att båda slutpunkterna är giltiga utfärdare. Om du vill gå igenom ett exempel laddar du ned eller klonar exempelprogrammet och uppdaterar sedan exemplet för att stödja båda slutpunkterna som giltiga utfärdare.

Ladda ned arkivet: active-directory-b2c-dotnet-webapp-and-webapi-master.zip

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

Aktivera flera utfärdare i webb-API

I det här avsnittet uppdaterar du koden för att ange att båda token-utfärdarens slutpunkter är giltiga.

  1. Öppna lösningen B2C-WebAPI-DotNet.sln i Visual Studio

  2. I TaskService-projektet öppnar du filen TaskService\App_Start\Startup.Auth.cs i redigeringsprogrammet

  3. Lägg till följande using direktiv överst i filen:

    using System.Collections.Generic;

  4. ValidIssuers Lägg till egenskapen i TokenValidationParameters definitionen och ange båda URI:erna som du registrerade i föregående avsnitt:

    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 tillhandahålls av MSAL.NET och används av OWIN-mellanprogrammet i nästa kodavsnitt i Startup.Auth.cs. Med flera giltiga utfärdare angivna görs OWIN-programpipelinen medveten om att båda tokenslutpunkterna är giltiga utfärdare.

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

Som tidigare nämnts tillhandahåller andra OWIN-bibliotek vanligtvis en liknande funktion för att stödja flera utfärdare. Även om exempel för varje bibliotek ligger utanför omfånget för den här artikeln kan du använda en liknande teknik för de flesta bibliotek.

Växla slutpunkter i webbappen

Eftersom båda URI:erna nu stöds av webb-API:et behöver du nu uppdatera webbprogrammet så att det hämtar token från b2clogin.com slutpunkten.

Du kan till exempel konfigurera exempelwebbappen så att den använder den nya slutpunkten genom att ida:AadInstance ändra värdet i TaskWebApp\Web.config-filen i TaskWebApp-projektet .

ida:AadInstance Ändra värdet i Web.config för TaskWebApp så att det refererar till {your-b2c-tenant-name}.b2clogin.com i stället för login.microsoftonline.com.

Innan:

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

Efter (ersätt {your-b2c-tenant} med namnet på din B2C-klientorganisation):

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

När slutpunktssträngarna konstrueras under körningen av webbappen används de b2clogin.com-baserade slutpunkterna när token begärs.

När du använder en anpassad domän:

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

Nästa steg

Den här artikeln presenterade en metod för att konfigurera ett webb-API som implementerar Microsoft OWIN-mellanprogrammet (Katana) för att acceptera token från flera utfärdarslutpunkter. Som du kanske märker finns det flera andra strängar i Web.Config filer för både TaskService- och TaskWebApp-projekten som måste ändras om du vill skapa och köra dessa projekt mot din egen klientorganisation. Du är välkommen att ändra projekten på rätt sätt om du vill se dem i praktiken, men en fullständig genomgång av detta ligger utanför omfånget för den här artikeln.

Mer information om de olika typerna av säkerhetstoken som genereras av Azure AD B2C finns i Översikt över token i Azure Active Directory B2C.