Webbapp som loggar in användare: Kodkonfiguration

Lär dig hur du konfigurerar koden för din webbapp som loggar in användare.

Microsoft-bibliotek som stöder webbappar

Följande Microsoft-bibliotek används för att skydda en webbapp (och ett webb-API):

Språk/ramverk Projekt på
GitHub
Paket
komma igång
Logga in användare Åtkomst till webb-API:er Allmänt tillgänglig (GA) eller
Offentlig förhandsversion1
.NET MSAL.NET Microsoft.Identity.Client Biblioteket kan inte begära ID-token för användarinloggning. Biblioteket kan begära åtkomsttoken för skyddade webb-API:er. Allmän tillgänglighet
.NET Microsoft.IdentityModel Microsoft.IdentityModel Biblioteket kan inte begära ID-token för användarinloggning.2 Biblioteket kan inte begära åtkomsttoken för skyddade webb-API:er.2 Allmän tillgänglighet
ASP.NET Core ASP.NET Core Microsoft.AspNetCore.Authentication Snabbstart Biblioteket kan begära ID-token för användarinloggning. Biblioteket kan inte begära åtkomsttoken för skyddade webb-API:er. Allmän tillgänglighet
ASP.NET Core Microsoft.Identity.Web Microsoft.Identity.Web Snabbstart Biblioteket kan begära ID-token för användarinloggning. Biblioteket kan begära åtkomsttoken för skyddade webb-API:er. Allmän tillgänglighet
Java MSAL4J msal4j Snabbstart Biblioteket kan begära ID-token för användarinloggning. Biblioteket kan begära åtkomsttoken för skyddade webb-API:er. Allmän tillgänglighet
Spring spring-cloud-azure-starter-active-directory spring-cloud-azure-starter-active-directory Självstudie Biblioteket kan begära ID-token för användarinloggning. Biblioteket kan begära åtkomsttoken för skyddade webb-API:er. Allmän tillgänglighet
Node.js MSAL-nod msal-node Snabbstart Biblioteket kan begära ID-token för användarinloggning. Biblioteket kan begära åtkomsttoken för skyddade webb-API:er. Allmän tillgänglighet
Python MSAL Python msal Biblioteket kan begära ID-token för användarinloggning. Biblioteket kan begära åtkomsttoken för skyddade webb-API:er. Allmän tillgänglighet
Python Identitet Identitet Snabbstart Biblioteket kan begära ID-token för användarinloggning. Biblioteket kan begära åtkomsttoken för skyddade webb-API:er. --

(1)Universella licensvillkor för onlinetjänster gäller för bibliotek i offentlig förhandsversion.

(2)Microsoft.IdentityModel-biblioteket validerar endast token – det kan inte begära ID eller åtkomsttoken.

Välj den flik som motsvarar den plattform som du är intresserad av:

Kodfragment i den här artikeln och följande extraheras från ASP.NET Core-webbappens inkrementella självstudie, kapitel 1.

Du kanske vill se den här självstudien för fullständig implementeringsinformation.

Konfigurationsfiler

Webbprogram som loggar in användare med hjälp av Microsofts identitetsplattform konfigureras via konfigurationsfiler. Dessa filer måste ange följande värden:

  • Molninstansen om du till exempel vill att din app ska köras i nationella moln. De olika alternativen är;
    • https://login.microsoftonline.com/ för offentligt Azure-moln
    • https://login.microsoftonline.us/ för Azure US Government
    • https://login.microsoftonline.de/ för Microsoft Entra Tyskland
    • https://login.partner.microsoftonline.cn/common för Microsoft Entra Kina som drivs av 21Vianet
  • Målgruppen i klientorganisations-ID :t. Alternativen varierar beroende på om din app är enskild klientorganisation eller flera klienter.
    • Klientorganisations-GUID som hämtats från Azure-portalen för att logga in användare i din organisation. Du kan också använda ett domännamn.
    • organizations för att logga in användare på ett arbets- eller skolkonto
    • common för att logga in användare med ett arbets- eller skolkonto eller ett personligt Microsoft-konto
    • consumers för att logga in användare med ett personligt Microsoft-konto
  • Klient-ID:t för ditt program, som kopierats från Azure-portalen

Du kan också se referenser till utfärdaren, en sammanlänkning av instansen och klient-ID-värden.

I ASP.NET Core finns de här inställningarna i filen appsettings.json i avsnittet "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"
  }
}

I ASP.NET Core innehåller en annan fil (egenskaper\start Inställningar.json) URL:en (applicationUrl) och TLS/SSL-porten (sslPort) för ditt program och olika profiler.

{
  "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/"
    }
  }
}

I Azure-portalen måste de omdirigerings-URI:er som du registrerar på sidan Autentisering för ditt program matcha dessa URL:er. För de två föregående konfigurationsfilerna skulle de vara https://localhost:44321/signin-oidc. Orsaken är att applicationUrl är , men sslPort anges (44321http://localhost:3110). CallbackPath är /signin-oidc, enligt definitionen i appsettings.json.

På samma sätt skulle utloggnings-URI:n vara inställd på https://localhost:44321/signout-oidc.

Kommentar

SignedOutCallbackPath bör ställa in antingen på portalen eller programmet för att undvika konflikter när händelsen hanteras.

Initieringskod

Initieringskodskillnaderna är plattformsberoende. För ASP.NET Core och ASP.NET delegeras inloggning av användare till OpenID-Anslut mellanprogram. Mallen ASP.NET eller ASP.NET Core genererar webbprogram för Azure AD v1.0-slutpunkten. En del konfiguration krävs för att anpassa dem till Microsofts identitetsplattform.

I ASP.NET Core-webbappar (och webb-API:er) skyddas programmet eftersom du har ett Authorize attribut på kontrollanterna eller kontrollantåtgärderna. Det här attributet kontrollerar att användaren är autentiserad. Innan .NET 6 släpptes fanns kodinitiering i filen Startup.cs . Nya ASP.NET Core-projekt med .NET 6 innehåller inte längre en Startup.cs fil. Att ta dess plats är den Program.cs filen. Resten av den här självstudien gäller .NET 5 eller lägre.

Kommentar

Om du vill börja direkt med de nya ASP.NET Core-mallarna för Microsofts identitetsplattform, som använder Microsoft.Identity.Web, kan du ladda ned ett förhandsversions nuGet-paket som innehåller projektmallar för .NET 5.0. När du har installerat kan du sedan direkt instansiera ASP.NET Core-webbprogram (MVC eller Blazor). Mer information finns i Projektmallar för Microsoft.Identity.Web-webbappar. Det här är den enklaste metoden eftersom den gör alla följande steg åt dig.

Om du föredrar att starta projektet med det aktuella standard-ASP.NET Core-webbprojektet i Visual Studio eller med hjälp dotnet new mvc --auth SingleOrg av eller dotnet new webapp --auth SingleOrgvisas kod som följande:

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

Den här koden använder det äldre NuGet-paketet Microsoft.AspNetCore.Authentication.AzureAD.UI som används för att skapa ett Azure Active Directory v1.0-program. I den här artikeln beskrivs hur du skapar ett Microsofts identitetsplattform v2.0-program som ersätter koden.

  1. Lägg till NuGet-paketen Microsoft.Identity.Web och Microsoft.Identity.Web.UI i projektet. Microsoft.AspNetCore.Authentication.AzureAD.UI Ta bort NuGet-paketet om det finns.

  2. Uppdatera koden i ConfigureServices så att den AddMicrosoftIdentityWebApp använder metoderna och AddMicrosoftIdentityUI .

    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. Configure I metoden i Startup.cs aktiverar du autentisering med ett anrop till app.UseAuthentication(); och 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
    }
    

I den koden:

  • Tilläggsmetoden AddMicrosoftIdentityWebApp definieras i Microsoft.Identity.Web, som;

    • Konfigurerar alternativ för att läsa konfigurationsfilen (här från avsnittet "Microsoft Entra ID")
    • Konfigurerar Alternativen för OpenID Anslut så att utfärdaren är Microsofts identitetsplattform.
    • Verifierar utfärdaren av token.
    • Säkerställer att anspråken som motsvarar namnet mappas från anspråket preferred_username i ID-token.
  • Förutom konfigurationsobjektet kan du ange namnet på konfigurationsavsnittet när du anropar AddMicrosoftIdentityWebApp. Som standard är AzureAddet .

  • AddMicrosoftIdentityWebApp har andra parametrar för avancerade scenarier. Om du till exempel spårar OpenID-Anslut mellanprogramshändelser kan du felsöka webbprogrammet om autentiseringen inte fungerar. Om du anger den valfria parametern subscribeToOpenIdConnectMiddlewareDiagnosticsEvents till true visas hur information bearbetas av uppsättningen med ASP.NET Core-mellanprogram när den fortsätter från HTTP-svaret till användarens identitet i HttpContext.User.

  • Tilläggsmetoden AddMicrosoftIdentityUI definieras i Microsoft.Identity.Web.UI. Den tillhandahåller en standardstyrenhet för att hantera inloggning och utloggning.

Mer information om hur Microsoft.Identity.Web gör att du kan skapa webbappar finns i Webbappar i microsoft-identity-web.

Nästa steg

I nästa artikel får du lära dig hur du utlöser inloggning och utloggning.

Gå vidare till nästa artikel i det här scenariot, Logga in och logga ut.