Delen via


Web-app waarmee gebruikers worden aangemeld: codeconfiguratie

In dit artikel wordt beschreven hoe u code configureert voor een web-app waarmee gebruikers worden aangemeld.

Microsoft-bibliotheken die web-apps ondersteunen

De volgende Microsoft-bibliotheken worden gebruikt om een web-app (en een web-API) te beveiligen:

Taal/framework Project over
GitHub
Pakket Aan de
slag
Gebruikers aanmelden Toegang krijgen tot web-API's Algemeen beschikbaar (GA) of
Openbare preview1
.NET MSAL.NET Microsoft.Identity.Client Bibliotheek kan geen id-tokens aanvragen voor aanmelding van gebruikers. Bibliotheek kan toegangstokens aanvragen voor beveiligde web-API's. GA
.NET Microsoft.IdentityModel Microsoft.IdentityModel Bibliotheek kan geen id-tokens aanvragen voor aanmelding van gebruikers.2 Bibliotheek kan geen toegangstokens aanvragen voor beveiligde web-API's.2 GA
ASP.NET Core Microsoft.Identity.Web Microsoft.Identity.Web Snelstartgids Bibliotheek kan id-tokens aanvragen voor aanmelding van gebruikers. Bibliotheek kan toegangstokens aanvragen voor beveiligde web-API's. GA
Java MSAL4J msal4j Snelstartgids Bibliotheek kan id-tokens aanvragen voor aanmelding van gebruikers. Bibliotheek kan toegangstokens aanvragen voor beveiligde web-API's. GA
Spring spring-cloud-azure-starter-active-directory spring-cloud-azure-starter-active-directory Zelfstudie Bibliotheek kan id-tokens aanvragen voor aanmelding van gebruikers. Bibliotheek kan toegangstokens aanvragen voor beveiligde web-API's. GA
Node.js MSAL-knooppunt msal-node Snelstartgids Bibliotheek kan id-tokens aanvragen voor aanmelding van gebruikers. Bibliotheek kan toegangstokens aanvragen voor beveiligde web-API's. GA
Python MSAL Python msal Bibliotheek kan id-tokens aanvragen voor aanmelding van gebruikers. Bibliotheek kan toegangstokens aanvragen voor beveiligde web-API's. GA
Python identity identity Snelstartgids Bibliotheek kan id-tokens aanvragen voor aanmelding van gebruikers. Bibliotheek kan toegangstokens aanvragen voor beveiligde web-API's. --

(1) Universele licentievoorwaarden voor onlineservices zijn van toepassing op bibliotheken in openbare preview.

(2) De bibliotheek Microsoft.IdentityModel valideert alleen tokens. Er kunnen geen id- of toegangstokens worden aangevraagd.

Selecteer het tabblad dat overeenkomt met het platform waarin u geïnteresseerd bent:

Codefragmenten in dit artikel en het volgende worden geëxtraheerd uit de incrementele zelfstudie ASP.NET Core-web-app, hoofdstuk 1.

U kunt deze zelfstudie raadplegen voor de volledige details over implementatie.

Configuratiebestanden

Webtoepassingen die gebruikers aanmelden met behulp van het Microsoft-identiteitsplatform worden geconfigureerd via configuratiebestanden. Deze bestanden moeten de volgende waarden opgeven:

  • Het cloudexemplaren als u wilt dat uw app bijvoorbeeld wordt uitgevoerd in nationale clouds. De verschillende opties zijn:
    • https://login.microsoftonline.com/ voor openbare Azure-cloud
    • https://login.microsoftonline.us/ voor Azure US Government
    • https://login.microsoftonline.de/ voor Microsoft Entra Duitsland
    • https://login.partner.microsoftonline.cn/common voor Microsoft Entra China beheerd door 21Vianet
  • De doelgroep in de tenant-id. De opties variëren, afhankelijk van of uw app één tenant of multitenant is.
    • De tenant-GUID die is verkregen via Azure Portal om gebruikers in uw organisatie aan te melden. U kunt ook een domeinnaam gebruiken.
    • organizations om gebruikers aan te melden in een werk- of schoolaccount
    • common om gebruikers aan te melden met een werk- of schoolaccount of persoonlijk Microsoft-account
    • consumers om gebruikers alleen aan te melden met een persoonlijk Microsoft-account
  • De client-id voor uw toepassing, zoals gekopieerd uit Azure Portal

Mogelijk ziet u ook verwijzingen naar de instantie, een samenvoeging van de instantie - en tenant-id-waarden .

In ASP.NET Core bevinden deze instellingen zich in het appsettings.json bestand, in de sectie 'Microsoft Entra ID'.

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "TenantId": "[Enter the tenantId here]",

    // Client ID (application ID) obtained from the Azure portal
    "ClientId": "[Enter the Client Id here]",
    "CallbackPath": "/signin-oidc",
    "SignedOutCallbackPath": "/signout-oidc"
  }
}

In ASP.NET Core bevat een ander bestand (properties\launchSettings.json) de URL (applicationUrl) en de TLS/SSL-poort (sslPort) voor uw toepassing en verschillende profielen.

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:3110/",
      "sslPort": 44321
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "webApp": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:3110/"
    }
  }
}

In Azure Portal moeten de omleidings-URI's die u registreert op de verificatiepagina voor uw toepassing overeenkomen met deze URL's. Voor de twee voorgaande configuratiebestanden zouden ze https://localhost:44321/signin-oidc zijn. De reden hiervoor is, applicationUrl http://localhost:3110maar sslPort is opgegeven (44321). CallbackPath is /signin-oidc, zoals gedefinieerd in appsettings.json.

Op dezelfde manier wordt de afmeldings-URI ingesteld op https://localhost:44321/signout-oidc.

Notitie

SignedOutCallbackPath moet zijn ingesteld op de portal of de toepassing om conflicten te voorkomen tijdens het afhandelen van de gebeurtenis.

Initialisatiecode

De verschillen in initialisatiecode zijn afhankelijk van het platform. Voor ASP.NET Core en ASP.NET wordt het aanmelden van gebruikers gedelegeerd aan de OpenID Connect-middleware. De ASP.NET of ASP.NET Core-sjabloon genereert webtoepassingen voor het Azure AD v1.0-eindpunt. Sommige configuraties moeten worden aangepast aan het Microsoft-identiteitsplatform.

In ASP.NET Core-web-apps (en -web-API's) wordt de toepassing beveiligd omdat uw controllers of controlleracties over een Authorize-kenmerk beschikken. Met dit kenmerk wordt gecontroleerd of de gebruiker is geverifieerd. Vóór de release van .NET 6 stond de code-initialisatie in het Startup.cs-bestand . Nieuwe ASP.NET Core-projecten met .NET 6 bevatten niet meer het bestand Startup.cs. Het is vervangen door het bestand Program.cs. De rest van deze zelfstudie heeft betrekking op .NET 5 of lager.

Notitie

Als u direct wilt beginnen met de nieuwe ASP.NET Core-sjablonen voor het Microsoft Identity Platform, die gebruikmaken van Microsoft.Identity.Web, kunt u een voorbeeld van een NuGet-pakket downloaden met projectsjablonen voor .NET 5.0. Vervolgens kunt u na installatie rechtstreeks ASP.NET Core-webtoepassingen (MVC of Blazor) instantiëren. Zie projectsjablonen voor Microsoft.Identity.Web-web-apps voor meer informatie. Dit is de eenvoudigste aanpak, omdat alle volgende stappen voor u worden uitgevoerd.

Als u uw project liever wilt starten met het huidige standaard ASP.NET Core-webproject in Visual Studio of met behulp van dotnet new mvc --auth SingleOrg of dotnet new webapp --auth SingleOrg, ziet u code zoals hierna volgt:

 services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
         .AddAzureAD(options => Configuration.Bind("AzureAd", options));

Deze code maakt gebruik van het verouderde NuGet-pakket Microsoft.AspNetCore.Authentication.AzureAD.UI dat wordt gebruikt om een Azure Active Directory v1.0-toepassing te maken. In dit artikel wordt uitgelegd hoe u een Microsoft Identity Platform v2.0-toepassing maakt die die code vervangt.

  1. Voeg de NuGet-pakketten Microsoft.Identity.Web en Microsoft.Identity.Web.UI toe aan uw project. Verwijder het Microsoft.AspNetCore.Authentication.AzureAD.UI NuGet-pakket als het aanwezig is.

  2. Werk de code bij in ConfigureServices zodat deze van de methode AddMicrosoftIdentityWebApp en AddMicrosoftIdentityUI gebruikmaakt.

    public class Startup
    {
     ...
     // This method gets called by the runtime. Use this method to add services to the container.
     public void ConfigureServices(IServiceCollection services)
     {
      services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
             .AddMicrosoftIdentityWebApp(Configuration, "AzureAd");
    
      services.AddRazorPages().AddMvcOptions(options =>
      {
       var policy = new AuthorizationPolicyBuilder()
                     .RequireAuthenticatedUser()
                     .Build();
       options.Filters.Add(new AuthorizeFilter(policy));
      }).AddMicrosoftIdentityUI();
    
  3. Schakel in de methode Configure in Startup.cs verificatie in met een aanroep naar app.UseAuthentication(); en app.MapControllers();.

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
     // more code here
     app.UseAuthentication();
     app.UseAuthorization();
    
     app.MapRazorPages();
     app.MapControllers();
     // more code here
    }
    

In die code:

  • De AddMicrosoftIdentityWebApp extensiemethode wordt gedefinieerd in Microsoft.Identity.Web, die;

    • Configureert opties voor het lezen van het configuratiebestand (hier in de sectie 'Microsoft Entra ID')
    • worden de OpenID Connect-opties geconfigureerd, zodat de instantie het Microsoft-identiteitsplatform is;
    • wordt de verlener van het token gevalideerd;
    • wordt gecontroleerd of de claims die overeenkomen met de naam, worden toegewezen vanuit de preferred_username-claim in het id-token.
  • Naast het configuratieobject kunt u de naam van de configuratiesectie opgeven bij het aanroepen van AddMicrosoftIdentityWebApp. Dit is standaard AzureAd.

  • AddMicrosoftIdentityWebApp heeft andere parameters voor geavanceerde scenario's. Wanneer u bijvoorbeeld gebeurtenissen met OpenID Connect-middleware traceert, kunt u problemen met uw webtoepassing oplossen als verificatie niet werkt. Als u de optionele parameter subscribeToOpenIdConnectMiddlewareDiagnosticsEvents op true instelt, ziet u hoe informatie wordt verwerkt door de set ASP.NET Core-middleware terwijl deze voortgaat van het HTTP-antwoord naar de identiteit van de gebruiker in HttpContext.User.

  • De uitbreidingsmethode AddMicrosoftIdentityUI wordt gedefinieerd in Microsoft.Identity.Web.UI. Hiermee wordt een standaardcontroller geboden voor het afhandelen van aanmelding en afmelden.

Zie Web Apps in Microsoft.Identity.Web voor meer informatie over hoe u web-apps kunt maken met Microsoft.Identity.Web.

Volgende stap