Een web-API op basis van OWIN migreren naar b2clogin.com of een aangepast domein

In dit artikel wordt een techniek beschreven voor het inschakelen van ondersteuning voor meerdere tokenverleners in web-API's die de Open Web Interface for .NET (OWIN) implementeren. Het ondersteunen van meerdere tokeneindpunten is handig wanneer u Azure Active Directory B2C-API's (Azure AD B2C) en de bijbehorende toepassingen van het ene domein naar het andere migreert. Bijvoorbeeld van login.microsoftonline.com naar b2clogin.com of naar een aangepast domein.

Door ondersteuning toe te voegen in uw API voor het accepteren van tokens die zijn uitgegeven door b2clogin.com, login.microsoftonline.com of een aangepast domein, kunt u uw webtoepassingen op een gefaseerde manier migreren voordat u ondersteuning voor login.microsoftonline.com uitgegeven tokens uit de API verwijdert.

In de volgende secties wordt een voorbeeld weergegeven van het inschakelen van meerdere verleners in een web-API die gebruikmaakt van de Microsoft OWIN-middlewareonderdelen (Katana). Hoewel de codevoorbeelden specifiek zijn voor de Microsoft OWIN-middleware, moet de algemene techniek van toepassing zijn op andere OWIN-bibliotheken.

Vereisten

U hebt de volgende Azure AD B2C-resources nodig voordat u doorgaat met de stappen in dit artikel:

Eindpunten van tokenverlener ophalen

U moet eerst de eindpunt-URI's van de tokenverlener ophalen voor elke verlener die u wilt ondersteunen in uw API. Gebruik de volgende procedure in de Azure Portal om de b2clogin.com en login.microsoftonline.com eindpunten op te halen die door uw Azure AD B2C-tenant worden ondersteund.

Selecteer eerst een van uw bestaande gebruikersstromen:

  1. Navigeer naar uw Azure AD B2C-tenant in de Azure Portal

  2. Selecteer onder Beleidde optie Gebruikersstromen (beleid)

  3. Selecteer een bestaand beleid, bijvoorbeeld B2C_1_signupsignin1 en selecteer vervolgens Gebruikersstroom uitvoeren

  4. Selecteer onder de kop Gebruikersstroom uitvoeren boven aan de pagina de hyperlink om naar het OpenID Connect-detectie-eindpunt voor die gebruikersstroom te navigeren.

    Bekende URI-hyperlink op de pagina Nu uitvoeren van de Azure Portal

  5. Noteer de issuer waarde op de pagina die in uw browser wordt geopend, bijvoorbeeld:

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

  6. Gebruik de vervolgkeuzelijst Domein selecteren om het andere domein te selecteren, voer de vorige twee stappen opnieuw uit en noteer de waarde ervan issuer .

Er moeten nu twee URI's zijn geregistreerd die vergelijkbaar zijn met:

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

Aangepast beleid

Als u aangepast beleid hebt in plaats van gebruikersstromen, kunt u een vergelijkbaar proces gebruiken om de URI's van de verlener op te halen.

  1. Navigeer naar uw Azure AD B2C-tenant
  2. Identity Experience Framework selecteren
  3. Selecteer een van uw relying party-beleidsregels, bijvoorbeeld B2C_1A_signup_signin
  4. Gebruik de vervolgkeuzelijst Domein selecteren om een domein te selecteren, bijvoorbeeld yourtenant.b2clogin.com
  5. Selecteer de hyperlink die wordt weergegeven onder OpenID Connect-detectie-eindpunt
  6. De waarde vastleggen issuer
  7. Voer de stappen 4-6 uit voor het andere domein, bijvoorbeeld login.microsoftonline.com

De voorbeeldcode halen

Nu u beide tokeneindpunt-URI's hebt, moet u uw code bijwerken om op te geven dat beide eindpunten geldige verleners zijn. Als u een voorbeeld wilt doorlopen, downloadt of kloont u de voorbeeldtoepassing en werkt u het voorbeeld bij om beide eindpunten als geldige verleners te ondersteunen.

Het archief downloaden: active-directory-b2c-dotnet-webapp-and-webapi-master.zip

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

Meerdere verleners inschakelen in web-API

In deze sectie werkt u de code bij om op te geven dat beide eindpunten van de tokenverlener geldig zijn.

  1. Open de oplossing B2C-WebAPI-DotNet.sln in Visual Studio

  2. Open in het project TaskService het bestand TaskService\App_Start\Startup.Auth.cs in de editor

  3. Voeg de volgende using instructie toe aan het begin van het bestand:

    using System.Collections.Generic;

  4. Voeg de ValidIssuers eigenschap toe aan de TokenValidationParameters definitie en geef beide URI's op die u in de vorige sectie hebt vastgelegd:

    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 wordt geleverd door MSAL.NET en wordt gebruikt door de OWIN-middleware in de volgende codesectie in Startup.Auth.cs. Als er meerdere geldige verleners zijn opgegeven, wordt de OWIN-toepassingspijplijn er bewust van gemaakt dat beide tokeneindpunten geldige verleners zijn.

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

Zoals eerder vermeld, bieden andere OWIN-bibliotheken doorgaans een vergelijkbare faciliteit voor het ondersteunen van meerdere verleners. Hoewel het geven van voorbeelden voor elke bibliotheek buiten het bereik van dit artikel valt, kunt u een vergelijkbare techniek gebruiken voor de meeste bibliotheken.

Schakelen tussen eindpunten in web-app

Nu beide URI's door uw web-API worden ondersteund, moet u uw webtoepassing bijwerken zodat deze tokens ophaalt van het b2clogin.com-eindpunt.

U kunt bijvoorbeeld de voorbeeldwebtoepassing configureren voor het gebruik van het nieuwe eindpunt door de waarde in het ida:AadInstanceTaskWebApp\ -Web.config-bestand van het Project TaskWebApp te wijzigen.

Wijzig de ida:AadInstance waarde in de Web.config van TaskWebApp zodat deze verwijst naar {your-b2c-tenant-name}.b2clogin.com in plaats van login.microsoftonline.com.

Voor:

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

Na (vervang door {your-b2c-tenant} de naam van uw B2C-tenant):

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

Wanneer de eindpunttekenreeksen worden samengesteld tijdens de uitvoering van de web-app, worden de op b2clogin.com gebaseerde eindpunten gebruikt wanneer tokens worden aangevraagd.

Wanneer u een aangepast domein gebruikt:

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

Volgende stappen

In dit artikel werd een methode beschreven voor het configureren van een web-API die de Microsoft OWIN-middleware (Katana) implementeert om tokens van meerdere eindpunten van verleners te accepteren. Zoals u misschien ziet, zijn er verschillende andere tekenreeksen in de Web.Config bestanden van zowel de TaskService- als TaskWebApp-projecten die moeten worden gewijzigd als u deze projecten wilt bouwen en uitvoeren op basis van uw eigen tenant. U kunt de projecten op de juiste manier aanpassen als u ze in actie wilt zien, maar een volledig overzicht hiervan valt buiten het bereik van dit artikel.

Zie Overzicht van tokens in Azure Active Directory B2C voor meer informatie over de verschillende typen beveiligingstokens die door Azure AD B2C worden verzonden.