Webbapp som loggar in användare: Kodkonfiguration
Den här artikeln beskriver hur du konfigurerar kod för en 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 | Få 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 | — | Allmän tillgänglighet | ||
.NET | Microsoft.IdentityModel | Microsoft.IdentityModel | — | 2 | 2 | Allmän tillgänglighet |
ASP.NET Core | ASP.NET Core | Microsoft.AspNetCore.Authentication | Snabbstart | Allmän tillgänglighet | ||
ASP.NET Core | Microsoft.Identity.Web | Microsoft.Identity.Web | Snabbstart | Allmän tillgänglighet | ||
Java | MSAL4J | msal4j | Snabbstart | Allmän tillgänglighet | ||
Spring | spring-cloud-azure-starter-active-directory | spring-cloud-azure-starter-active-directory | Självstudie | Allmän tillgänglighet | ||
Node.js | MSAL-nod | msal-node | Snabbstart | Allmän tillgänglighet | ||
Python | MSAL Python | msal | Allmän tillgänglighet | |||
Python | identitet | identitet | Snabbstart | -- |
(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-molnhttps://login.microsoftonline.us/
för Azure US Governmenthttps://login.microsoftonline.de/
för Microsoft Entra Tysklandhttps://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 Portal 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 skolkontocommon
för att logga in användare med ett arbets- eller skolkonto eller ett personligt Microsoft-kontoconsumers
för att logga in användare med ett personligt Microsoft-konto
- Klient-ID:t för ditt program, som kopierats från Azure Portal
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\launchSettings.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 Portal 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 (44321
http://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 Connect-mellanprogrammet. 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 SingleOrg
visas 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.
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.Uppdatera koden i
ConfigureServices
så att denAddMicrosoftIdentityWebApp
använder metoderna ochAddMicrosoftIdentityUI
.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();
Configure
I metoden i Startup.cs aktiverar du autentisering med ett anrop tillapp.UseAuthentication();
ochapp.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 OpenID Connect-alternativen 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 ärAzureAd
det .AddMicrosoftIdentityWebApp
har andra parametrar för avancerade scenarier. Till exempel kan spårning av OpenID Connect-mellanprogramshändelser hjälpa dig att felsöka webbprogrammet om autentiseringen inte fungerar. Om du anger den valfria parameternsubscribeToOpenIdConnectMiddlewareDiagnosticsEvents
tilltrue
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 iHttpContext.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.