Authentification de base pour API Web .NET 6
L'authentification de base est une méthode simple et courante pour sécuriser les API Web .NET 6. Elle repose sur l'envoi d'informations d'identification, généralement un nom d'utilisateur et un mot de passe, encodés en base64 dans l'en-tête de la requête HTTP.
Configuration de l'authentification de base dans .NET 6
-
Création du projet d'API Web: Commencez par créer un nouveau projet d'API Web .NET 6.
-
Ajout du package NuGet: Installez le package NuGet "Microsoft.AspNetCore.Authentication.Basic" dans votre projet.
-
Configuration de l'authentification de base: Dans le fichier
Program.cs
, configurez l'authentification de base dans le pipeline de requête :
builder.Services.AddAuthentication("BasicAuthentication")
.AddScheme("BasicAuthentication", null);
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("BasicAuthenticationPolicy", policy =>
{
policy.AuthenticationSchemes.Add("BasicAuthentication");
policy.RequireAuthenticatedUser();
});
});
app.UseAuthentication();
app.UseAuthorization();
- Définition du gestionnaire d'authentification: Créez une classe qui hérite de
AuthenticationHandler<AuthenticationSchemeOptions>
et implémente la méthodeHandleAuthenticateAsync
. Cette méthode va valider les informations d'identification fournies dans l'en-tête de la requête HTTP.
public class BasicAuthenticationHandler : AuthenticationHandler
{
protected override async Task HandleAuthenticateAsync()
{
// Récupération des informations d'identification de l'en-tête HTTP
if (!Request.Headers.TryGetValue("Authorization", out var authorizationHeader))
return AuthenticateResult.Fail("Authorization header not found.");
// Décodage des informations d'identification
var credentials = DecodeCredentials(authorizationHeader);
// Validation des informations d'identification (ici, validation fictive)
if (credentials.Username == "user" && credentials.Password == "password")
{
// Génération d'un ticket d'authentification
var principal = new ClaimsPrincipal(new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Name, credentials.Username),
new Claim(ClaimTypes.Role, "User")
}, "Basic"));
return AuthenticateResult.Success(new AuthenticationTicket(principal, "BasicAuthentication"));
}
return AuthenticateResult.Fail("Invalid credentials.");
}
private (string Username, string Password) DecodeCredentials(string authorizationHeader)
{
// Décodage des informations d'identification en base64
var encodedCredentials = authorizationHeader.Substring("Basic ".Length).Trim();
var decodedCredentials = Encoding.UTF8.GetString(Convert.FromBase64String(encodedCredentials));
// Séparation du nom d'utilisateur et du mot de passe
var credentials = decodedCredentials.Split(':');
return (credentials[0], credentials[1]);
}
}
- Protection des ressources: Décorez les contrôleurs ou les actions qui nécessitent une authentification de base avec l'attribut
Authorize
:
[Authorize(Policy = "BasicAuthenticationPolicy")]
public class WeatherForecastController : ControllerBase
{
// ...
}
Conclusion
L'authentification de base est un moyen simple de sécuriser les API Web .NET 6, mais elle ne convient pas aux applications sensibles car les informations d'identification sont transmises en clair. Pour une sécurité accrue, utilisez d'autres mécanismes d'authentification tels que OAuth 2.0 ou JWT.
Mots clés: Authentification de base, API Web .NET 6, sécurité, API, informations d'identification, encodage en base64, autorisation, protection des ressources.