Implémentation d'authentification de schéma de base de style Microsoft facile à utiliser et très légère pour ASP.NET Core.
Voir sur GitHub
.NET Framework 4.6.1 et/ou NetStandard 2.0 et versions ultérieures
Multi-cible : net8.0 ; net7.0 ; net6.0 ; net5.0 ; netcoreapp3.1 ; netcoreapp3.0 ; norme réseau2.0 ; net461
Cette bibliothèque est publiée sur NuGet. Ainsi, le package NuGet peut être installé directement sur votre projet si vous souhaitez l'utiliser sans apporter de modifications personnalisées au code.
Téléchargez directement à partir du lien ci-dessous. Veuillez envisager de télécharger le nouveau package car l’ancien est devenu obsolète.
Nouveau lien vers le package - AspNetCore.Authentication.Basic.
Lien vers l'ancien package - Mihir.AspNetCore.Authentication.Basic.
Ou en exécutant la commande ci-dessous sur votre projet.
PM> Install-Package AspNetCore.Authentication.Basic
Des échantillons sont disponibles dans le répertoire des échantillons.
Sa configuration est assez simple. Vous aurez besoin de connaissances pratiques de base sur ASP.NET Core 2.0 ou version ultérieure pour commencer à utiliser cette bibliothèque.
Il existe 2 manières différentes d'utiliser cette bibliothèque pour faire son travail. Les deux méthodes peuvent être mélangées si nécessaire.
1] Utilisation de l'implémentation de IBasicUserValidationService
2] Utilisation de BasicOptions.Events (délégué OnValidateCredentials) qui est la même approche que celle que vous trouverez sur les bibliothèques d'authentification de Microsoft
Remarques :
Cela nécessite que Realm soit défini dans les options si SuppressWWWAuthenticateHeader n'est pas défini.
Si une implémentation de l'interface IBasicUserValidationService est utilisée et que le délégué BasicOptions.Events.OnValidateCredentials est également défini, ce délégué sera utilisé en premier.
Utilisez toujours le protocole HTTPS (certificat SSL) en production lorsque vous utilisez l'authentification de base.
using AspNetCore.Authentication.Basic;public class Startup{public void ConfigureServices(IServiceCollection services){// Cela nécessite que Realm soit défini dans les options si SuppressWWWAuthenticateHeader n'est pas défini.// Si une implémentation de l'interface IBasicUserValidationService est utilisée ainsi que les options Le délégué .Events.OnValidateCredentials est également défini, ce délégué sera utilisé first.services.AddAuthentication(BasicDefaults.AuthenticationScheme)// Le AddBasic ci-dessous sans paramètre de type nécessitera que le délégué options.Events.OnValidateCredentials soit défini.//.AddBasic(options => { options.Realm = "My App"; }) ;// Le paramètre AddBasic with type ci-dessous ajoutera le BasicUserValidationService au conteneur de dépendances. .AddBasic<BasicUserValidationService>(options => { options.Realm = "My App"; });services.AddControllers();//// Par défaut, l'authentification n'est pas contestée pour chaque requête prévue par défaut par ASP.NET Core comportement.//// Donc, pour contester l'authentification pour chaque demande, veuillez utiliser l'option FallbackPolicy ci-dessous.//services.AddAuthorization(options =>//{// options.FallbackPolicy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();//});}public void Configure(IApplicationBuilder app, IHostingEnvironment env){app.UseHttpsRedirection();// L'ordre ci-dessous de la chaîne de pipelines est important !app.UseRouting();app.UseAuthentication();app.UseAuthorization();app.UseEndpoints(points de terminaison =>{endpoints.MapControllers();});}}
using AspNetCore.Authentication.Basic;public class Startup{public void ConfigureServices(IServiceCollection services){// Cela nécessite que Realm soit défini dans les options si SuppressWWWAuthenticateHeader n'est pas défini.// Si une implémentation de l'interface IBasicUserValidationService est utilisée ainsi que les options Le délégué .Events.OnValidateCredentials est également défini, ce délégué sera utilisé first.services.AddAuthentication(BasicDefaults.AuthenticationScheme)// Le AddBasic ci-dessous sans paramètre de type nécessitera que le délégué options.Events.OnValidateCredentials soit défini.//.AddBasic(options => { options.Realm = "My App"; }) ;// Le paramètre AddBasic with type ci-dessous ajoutera le BasicUserValidationService au conteneur de dépendances. .AddBasic<BasicUserValidationService>(options => { options.Realm = "My App"; });services.AddMvc();//// Par défaut, l'authentification n'est pas contestée pour chaque requête prévue par défaut d'ASP.NET Core comportement.//// Donc, pour contester l'authentification pour chaque demande, veuillez utiliser l'option ci-dessous au lieu de services.AddMvc().//services.AddMvc(options => //{// options.Filters.Add(new AuthorizeFilter(new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build()));//});}public void Configure(IApplicationBuilder app, IHostingEnvironment env){app.UseAuthentication();app.UseMvc ();}}
en utilisant AspNetCore.Authentication.Basic;classe publique BasicUserValidationService : IBasicUserValidationService{privé en lecture seule ILogger<BasicUserValidationService> _logger;privé en lecture seule IUserRepository _userRepository;public BasicUserValidationService(ILogger<BasicUserValidationService> enregistreur, IUserRepository userRepository){_logger = logger;_userRepository = userRepository;}public async Task<bool> IsValidAsync(string username, string password){try{// REMARQUE : N'UTILISEZ PAS CETTE IMPLÉMENTATION. CECI EST UNIQUEMENT À DES FINS DE DÉMO// Écrivez votre implémentation ici et renvoyez vrai ou faux selon la validation..var user = wait _userRepository.GetUserByUsername(username);var isValid = user != null && user.Password == password;return isValid;}catch (Exception e){_logger.LogError(e, e.Message);throw;}}}
Doit être défini si SuppressWWWAuthenticateHeader n’est pas défini sur true. Il est utilisé avec l'en-tête de réponse WWW-Authenticate lors de la contestation de demandes non authentifiées.
La valeur par défaut est fausse.
S'il est défini sur true, il ne renverra PAS l'en-tête de réponse WWW-Authenticate lors de la contestation de requêtes non authentifiées.
S'il est défini sur false, il renverra l'en-tête de réponse WWW-Authenticate lors de la contestation de demandes non authentifiées.
La valeur par défaut est fausse.
S'il est défini sur true, il vérifie si le filtre AllowAnonymous sur l'action du contrôleur ou les métadonnées sur le point de terminaison qui, s'il est trouvé, n'essaie pas d'authentifier la demande.
Objet fourni par l'application pour traiter les événements déclenchés par le middleware d'authentification de base.
L'application peut implémenter entièrement l'interface ou créer une instance de BasicEvents et attribuer des délégués uniquement aux événements qu'elle souhaite traiter.
Un délégué affecté à cette propriété sera appelé juste avant de valider les informations d'identification.
Vous devez fournir un délégué pour cette propriété pour que l'authentification se produise.
Dans votre délégué, vous devez soit appeler context.ValidationSucceeded() qui gérera la construction du principal de revendications d'authentification à partir des détails de l'utilisateur auquel sera attribuée la propriété context.Principal et appelle context.Success(), soit construire un principal de revendications d'authentification à partir de l'utilisateur. détails et attribuez-le à la propriété context.Principal et enfin appelez la méthode context.Success().
Si seule la propriété context.Principal est définie sans appeler la méthode context.Success(), la méthode Success() est automatiquement appelée.
Un délégué affecté à cette propriété sera appelé lorsque l'authentification réussira. Il ne sera pas appelé si le délégué OnValidateCredentials est affecté.
Il peut être utilisé pour ajouter des revendications, des en-têtes, etc. à la réponse.
Un délégué affecté à cette propriété sera invoqué lorsqu'une exception inattendue est levée dans la bibliothèque.
Un délégué affecté à cette propriété sera appelé avant qu'un défi ne soit renvoyé à l'appelant lors du traitement d'une réponse non autorisée.
Utilisez-le uniquement si vous savez ce que vous faites et si vous souhaitez utiliser une implémentation personnalisée. Configurez le délégué pour qu'il traite les problèmes de défi 401, si un schéma d'authentification en question traite une interaction d'authentification dans le cadre de son flux de requêtes. (comme ajouter un en-tête de réponse ou changer le résultat 401 en 302 d'une page de connexion ou d'un emplacement de connexion externe.)
Appelez context.Handled() à la fin afin que toute logique par défaut pour ce défi soit ignorée.
Un délégué affecté à cette propriété sera appelé si l'autorisation échoue et entraîne une réponse interdite.
Utilisez-le uniquement si vous savez ce que vous faites et si vous souhaitez utiliser une implémentation personnalisée.
Définissez le délégué pour gérer Forbid.
Appelez context.Handled() à la fin afin que toute logique par défaut soit ignorée.
Avec ASP.NET Core, toutes les demandes ne sont pas contestées pour l'authentification par défaut. Ne vous inquiétez donc pas si votre BasicUserValidationService n'est pas atteint lorsque vous ne transmettez pas les détails d'authentification de base requis avec la demande. C'est un comportement normal. ASP.NET Core ne conteste l'authentification que lorsqu'il lui est spécifiquement demandé de le faire, soit en décorant le contrôleur/la méthode avec l'attribut de filtre [Authorize] , soit par un autre moyen.
Cependant, si vous souhaitez que toutes les demandes contestent l'authentification par défaut, en fonction de ce que vous utilisez, vous pouvez ajouter la ligne d'options ci-dessous à la méthode ConfigureServices sur la classe de démarrage .
// Sur ASP.NET Core 3.0 à partir de services.AddAuthorization(options =>{options.FallbackPolicy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();});// OU// Sur ASP.NET Core 2.0 à partir de services.AddMvc (options => {options.Filters.Add(nouveau AuthorizeFilter(nouveau AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build()));});
Si vous n'utilisez pas MVC mais que vous utilisez Endpoints sur ASP.NET Core 3.0 ou version ultérieure, vous pouvez ajouter une méthode de chaîne .RequireAuthorization()
à la carte des points de terminaison sous Configurer la méthode sur la classe de démarrage , comme indiqué ci-dessous.
// ASP.NET Core 3.0 et versions ultérieuresapp.UseEndpoints(endpoints =>{endpoints.MapGet("/", async context =>{await context.Response.WriteAsync("Hello World!");}).RequireAuthorization(); / / NOTEZ CECI !!!! });
ASP.NET Core prend en charge l'ajout de plusieurs schémas d'authentification que cette bibliothèque prend également en charge. Il suffit d'utiliser la méthode d'extension qui prend le nom du schéma comme paramètre. Le reste est pareil. Cela peut être réalisé de différentes manières. Vous trouverez ci-dessous juste un exemple rapide et approximatif.
Veuillez noter que le paramètre de nom de schéma peut être n'importe quelle chaîne de votre choix.
public void ConfigureServices(IServiceCollection services){services.AddTransient<IUserRepository, InMemoryUserRepository>();services.AddAuthentication("Scheme1").AddBasic<BasicUserValidationService>("Scheme1", options => { options.Realm = "Mon application"; }).AddBasic<BasicUserValidationService_2>("Scheme2", options => { options.Realm = "Mon application"; }).AddBasic("Scheme3", options => { options.Realm = "Mon application" ; options.Events = new BasicEvents{OnValidateCredentials = async (context) =>{var userRepository = context.HttpContext.RequestServices.GetRequiredService<IUserRepository>();var user = wait userRepository.GetUserByUsername(context.Username);var isValid = user ! = null && user.Password == contexte.Password;if (isValid){context.Response.Headers.Add("ValidationCustomHeader", "From OnValidateCredentials");var claims = new[]{new Claim("CustomClaimType", "Custom Claim Value - from OnValidateCredentials")};context.ValidationSucceeded (réclamations); // les revendications sont facultatives}else{context.ValidationFailed();}}}});services.AddControllers();services.AddAuthorization(options =>{options.FallbackPolicy = new AuthorizationPolicyBuilder("Scheme1", "Scheme2", " Scheme3").RequireAuthenticatedUser().Build();});}
Version | Remarques |
---|---|
8.0.0 |
|
7.0.0 |
|
6.0.1 |
|
5.1.0 |
|
5.0.0 |
|
3.1.1 |
|
3.1.0 |
|
2.2.0 |
|
RFC 7617 : Spécifications techniques pour HTTP Basic
Documentation sur la sécurité ASP.NET Core
aspnet/Sécurité
Licence MIT