Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Varning
Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i supportpolicyn för .NET och .NET Core. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .
Viktigt!
Den här informationen gäller en förhandsversionsprodukt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, med avseende på den information som tillhandahålls här.
För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .
Den här handledningen visar hur du gör det möjligt för användare att logga in via en WS-Federation autentiseringsleverantör som Active Directory Federation Services (ADFS) eller Microsoft Entra ID. Den använder exempelappen ASP.NET Core som beskrivs i Facebook, Google och extern providerautentisering.
För ASP.NET Core-appar tillhandahålls WS-Federation support av Microsoft.AspNetCore.Authentication.WsFederation. Den här komponenten är portad från Microsoft.Owin.Security.WsFederation och delar många av komponentens mekanik. Komponenterna skiljer sig dock åt på ett par viktiga sätt.
Som standard är det nya mellanprogrammet:
- Tillåter inte oönskade inloggningar. Den här funktionen i WS-Federation-protokollet är sårbar för XSRF-attacker. Det kan dock aktiveras med alternativet
AllowUnsolicitedLogins
. - Kontrollerar inte alla formulärinlägg för inloggningsmeddelanden. Endast begäranden till
CallbackPath
kontrolleras vid inloggning.CallbackPath
har som standardvärde/signin-wsfed
, men detta kan ändras via egenskapen RemoteAuthenticationOptions.CallbackPath som ärvs från klassen WsFederationOptions. Den här sökvägen kan delas med andra autentiseringsprovidrar genom att aktivera alternativet SkipUnrecognizedRequests .
Registrera appen med Active Directory
Federationstjänster för Active Directory
- Öppna serverns guiden Lägg till förlitande partförtroende från ADFS-hanteringskonsolen:
- Välj att ange data manuellt:
Ange ett visningsnamn för den förlitande parten. Namnet är inte viktigt för ASP.NET Core-appen.
Microsoft.AspNetCore.Authentication.WsFederation saknar stöd för tokenkryptering, så konfigurera inte ett tokenkrypteringscertifikat:
- Aktivera stöd för WS-Federation passivt protokoll med hjälp av appens URL. Kontrollera att porten är korrekt för appen:
Anmärkning
Detta måste vara en HTTPS-URL. IIS Express kan tillhandahålla ett självsignerat certifikat när du är värd för appen under utvecklingen. Kestrel kräver manuell certifikatkonfiguration. Mer information finns i dokumentationenKestrel.
Klicka på Nästa i resten av guiden och Stäng i slutet.
ASP.NET Core Identity kräver ett NamnID-krav . Lägg till en från dialogrutan Redigera anspråksregler :
- I guiden Lägg till regel för transformeringsanspråk lämnar du standardmallen Skicka LDAP-attribut som anspråk markerad och klickar på Nästa. Lägg till en regel som mappar LDAP-attributet SAM-Account-Name till utgående anspråk för namn-ID :
- Klicka på Slutför>OK i fönstret Redigera anspråksregler .
Microsoft Entra ID
- Gå till sidan för appregistreringar för Microsoft Entra ID-tenanten. Klicka på Ny programregistrering:
- Ange ett namn för appregistreringen. Detta är inte viktigt för ASP.NET Core-appen.
- Ange den URL som appen lyssnar på som inloggnings-URL:
- Klicka på Slutpunkter och notera url:en för federationsmetadatadokumentet . Det här är WS-Federation mellanprogram:
MetadataAddress
- Gå till den nya appregistreringen. Klicka på Exponera ett API. Klicka på Program-ID URI Ange>Spara. Anteckna applikations-ID-URI. Det här är WS-Federation mellanprogram:
Wtrealm
Använd WS-Federation utan ASP.NET Core Identity
Det WS-Federation mellanprogrammet kan användas utan Identity. Till exempel:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultChallengeScheme = WsFederationDefaults.AuthenticationScheme;
})
.AddWsFederation(options =>
{
options.Wtrealm = Configuration["wsfed:realm"];
options.MetadataAddress = Configuration["wsfed:metadata"];
})
.AddCookie();
services.AddControllersWithViews();
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
}
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultChallengeScheme = WsFederationDefaults.AuthenticationScheme;
})
.AddWsFederation(options =>
{
options.Wtrealm = Configuration["wsfed:realm"];
options.MetadataAddress = Configuration["wsfed:metadata"];
})
.AddCookie();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
Lägg till WS-Federation som extern inloggningsprovider för ASP.NET Core Identity
Lägg till ett beroende av Microsoft.AspNetCore.Authentication.WsFederation i projektet.
Lägg till WS-Federation i
Startup.ConfigureServices
:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddAuthentication()
.AddWsFederation(options =>
{
// MetadataAddress represents the Active Directory instance used to authenticate users.
options.MetadataAddress = "https://<ADFS FQDN or AAD tenant>/FederationMetadata/2007-06/FederationMetadata.xml";
// Wtrealm is the app's identifier in the Active Directory instance.
// For ADFS, use the relying party's identifier, its WS-Federation Passive protocol URL:
options.Wtrealm = "https://localhost:44307/";
// For AAD, use the Application ID URI from the app registration's Overview blade:
options.Wtrealm = "api://bbd35166-7c13-49f3-8041-9551f2847b69";
});
services.AddControllersWithViews();
services.AddRazorPages();
}
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddAuthentication()
.AddWsFederation(options =>
{
// MetadataAddress represents the Active Directory instance used to authenticate users.
options.MetadataAddress = "https://<ADFS FQDN or AAD tenant>/FederationMetadata/2007-06/FederationMetadata.xml";
// Wtrealm is the app's identifier in the Active Directory instance.
// For ADFS, use the relying party's identifier, its WS-Federation Passive protocol URL:
options.Wtrealm = "https://localhost:44307/";
// For AAD, use the Application ID URI from the app registration's Overview blade:
options.Wtrealm = "api://bbd35166-7c13-49f3-8041-9551f2847b69";
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
Överbelastningen AddAuthentication(IServiceCollection, String) ställer in egenskapen DefaultScheme. Med AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) överlagring kan du konfigurera autentiseringsalternativ, som kan användas för att konfigurera standardautentiseringsscheman för olika syften. Efterföljande anrop till AddAuthentication
åsidosätter tidigare konfigurerade egenskaper för AuthenticationOptions.
AuthenticationBuilder tilläggsmetoder som registrerar en autentiseringshanterare kan bara anropas en gång per autentiseringsschema. Det finns överlagringar som gör det möjligt att konfigurera schemaegenskaper, schemanamn och visningsnamn.
Logga in med WS-Federation
Bläddra till appen och klicka på länken Logga in i navigeringshuvudet. Det finns ett alternativ för att logga in med WsFederation:
Med ADFS som provider omdirigeras knappen till en ADFS-inloggningssida:
Med Microsoft Entra-ID som provider omdirigeras knappen till inloggningssidan för Microsoft Entra-ID:
En lyckad inloggning för en ny användare omdirigeras till appens användarregistreringssida:
ASP.NET Core