Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Note
Ceci n’est pas la dernière version de cet article. Pour la version actuelle, consultez la version .NET 9 de cet article.
Avertissement
Cette version d'ASP.NET Core n'est plus prise en charge. Pour plus d’informations, consultez la stratégie de support .NET et .NET Core. Pour la version actuelle, consultez la version .NET 9 de cet article.
Importante
Ces informations portent sur un produit en phase de pré-lancement, qui est susceptible d’être substantiellement modifié avant sa commercialisation. Microsoft n’offre aucune garantie, expresse ou implicite, en ce qui concerne les informations fournies ici.
Pour la version actuelle, consultez la version .NET 9 de cet article.
Ce didacticiel explique comment permettre aux utilisateurs de se connecter avec un fournisseur d’authentification WS-Federation tel qu’Active Directory Federation Services (ADFS) ou Microsoft Entra ID. Il utilise l’application ASP.NET Core décrite dans Authentification Facebook, Google et fournisseur externe.
Pour les applications ASP.NET Core, la prise en charge de WS-Federation est fournie par Microsoft.AspNetCore.Authentication.WsFederation. Ce composant est porté depuis Microsoft.Owin.Security.WsFederation et partage de nombreux mécanismes de ce composant. Cependant, les composants diffèrent sur plusieurs points importants.
Par défaut, le nouveau middleware :
- N’autorise pas les connexions non sollicitées. Cette fonctionnalité du protocole WS-Federation est vulnérable aux attaques XSRF. Cependant, elle peut être activée avec l’option
AllowUnsolicitedLogins
. - Ne vérifie pas chaque formulaire envoyé pour les messages de connexion. Seules les requêtes vers
CallbackPath
sont vérifiées pour les connexions.CallbackPath
est défini par défaut sur/signin-wsfed
, mais peut être modifié via la propriété RemoteAuthenticationOptions.CallbackPath héritée de la classe WsFederationOptions. Ce chemin d’accès peut être partagé avec d’autres fournisseurs d’authentification en activant l’option SkipUnrecognizedRequests.
Enregistrez l’application avec Active Directory
Services de fédération Active Directory (AD FS)
- Ouvrez l’Assistant Ajout d’un partenaire de confiance dans la console ADFS Management :
- Choisissez d’entrer les données manuellement :
Entrez un nom d’affichage pour le partenaire de confiance. Le nom n’a pas d’importance pour l’application ASP.NET Core.
Microsoft.AspNetCore.Authentication.WsFederation ne prend pas en charge le chiffrement des jetons, ne configurez donc pas de certificat de chiffrement des jetons :
- Activez la prise en charge du protocole WS-Federation Passive à l’aide de l’URL de l’application. Vérifiez que le port est correct pour l’application :
Note
Il doit s’agir d’une URL HTTPS. IIS Express peut fournir un certificat auto-signé lors de l’hébergement de l’application pendant le développement. Kestrelnécessite une configuration manuelle du certificat. Pour plus d’informations, consultez la Kestreldocumentation.
Cliquez sur Suivant tout au long de l’assistant, puis sur Fermer à la fin.
ASP.NET Core Identity nécessite une revendication d’ID de nom. Ajoutez-en une à partir de la boîte de dialogue Modifier les règles de revendication :
- Dans l’assistant Ajouter une règle de transformation de revendication, laissez le modèle Envoyer les attributs LDAP en tant que revendications sélectionné par défaut, puis cliquez sur Suivant. Ajoutez une règle mappant l’attribut LDAP SAM-Account-Name à la revendication sortante ID de nom :
- Cliquez sur Terminer>OK dans la fenêtre Modifier les règles de revendication.
ID d'entrée Microsoft
- Accédez au panneau des inscriptions d’applications du locataire Microsoft Entra ID. Cliquez sur Nouvelle inscription d’application :
- Entrer un nom dans l’inscription de l’application. Ceci n’est pas important pour l’application ASP.NET Core.
- Entrez l’URL que l’application écoute comme URL de connexion :
- Cliquez sur Points de terminaison et notez l’URL du document de métadonnées de fédération. Il s’agit du middleware WS-Federation
MetadataAddress
:
- Accédez à la nouvelle inscription d’application. Cliquez sur Exposer une API. Cliquez sur URI d’ID d’application Définir> Enregistrer. Notez l’URI de l’ID d’application. Il s’agit du middleware WS-Federation
Wtrealm
:
Utiliser WS-Federation sans ASP.NET Core Identity
Le middleware WS-Federation peut être utilisé sans Identity. Par exemple :
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?}");
});
}
Ajouter WS-Federation en tant que fournisseur de connexion externe pour ASP.NET Core Identity
Ajoutez une dépendance à Microsoft.AspNetCore.Authentication.WsFederation au projet.
Ajoutez WS-Federation à
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);
}
La surcharge AddAuthentication(IServiceCollection, String) définit la propriété DefaultScheme. La surcharge AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) permet de configurer des options d’authentification, qui peuvent être utilisées pour définir des schémas d’authentification par défaut à des fins différentes. Les appels ultérieurs à AddAuthentication
remplacent les propriétés AuthenticationOptions précédemment configurées.
Les méthodes d’extension AuthenticationBuilder qui enregistrent un gestionnaire d’authentification ne peuvent être appelées qu’une seule fois par schéma d’authentification. Il existe des surcharges qui permettent de configurer les propriétés du schéma, le nom du schéma et le nom d’affichage.
Connectez-vous avec WS-Federation
Accédez à l’application et cliquez sur le lien Connexion dans l’en-tête de navigation. Vous pouvez vous connecter avec WsFederation :
Avec ADFS en tant que fournisseur, le bouton redirige vers une page de connexion ADFS :
Avec l’ID Microsoft Entra en tant que fournisseur, le bouton redirige vers une page de connexion à Microsoft Entra ID :
Une connexion réussie pour un nouvel utilisateur redirige vers la page d’inscription de l’utilisateur de l’application :