.net 6 Web Api Basic Authentication

4 min read Jun 03, 2024
.net 6 Web Api Basic Authentication

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

  1. Création du projet d'API Web: Commencez par créer un nouveau projet d'API Web .NET 6.

  2. Ajout du package NuGet: Installez le package NuGet "Microsoft.AspNetCore.Authentication.Basic" dans votre projet.

  3. 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();
  1. Définition du gestionnaire d'authentification: Créez une classe qui hérite de AuthenticationHandler<AuthenticationSchemeOptions> et implémente la méthode HandleAuthenticateAsync. 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]);
    }
}
  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.