.net 7 Web Api Jwt Authentication

4 min read Jun 03, 2024
.net 7 Web Api Jwt Authentication

Authentification JWT avec ASP.NET Core 7 Web API

Introduction

L'authentification JWT (JSON Web Token) est une méthode largement utilisée pour sécuriser les API Web. Il permet aux applications de s'authentifier et d'autoriser les utilisateurs en échangeant des jetons JSON signés numériquement. Dans cet article, nous allons explorer comment implémenter l'authentification JWT dans une API Web ASP.NET Core 7.

Configuration de l'authentification JWT

  1. Installation des packages NuGet: Commencez par installer les packages NuGet nécessaires pour la gestion des JWT :
  • Microsoft.AspNetCore.Authentication.JwtBearer
  • Microsoft.IdentityModel.Tokens
  1. Création des clés secrètes: Créez une clé secrète pour sécuriser les JWT. Cette clé doit être conservée secrète et ne doit jamais être exposée dans le code source.
public static class SecretKeys
{
    public static readonly string SecretKey = "YourSecretKeyHere";
}
  1. Configuration du service d'authentification: Dans le fichier Program.cs, configurez le service d'authentification JWT.
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(SecretKeys.SecretKey)),
            ValidateIssuer = false,
            ValidateAudience = false,
            ValidateLifetime = true,
            ClockSkew = TimeSpan.Zero
        };
    });
  1. Définition des politiques d'autorisation: Créez des politiques d'autorisation pour contrôler l'accès aux ressources protégées.
builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("Admin", policy => policy.RequireClaim("Role", "Admin"));
});

Génération de JWT

  1. Création du modèle de jeton: Créez un modèle de classe représentant la structure du JWT.
public class JwtPayload
{
    public int Id { get; set; }
    public string Username { get; set; }
    public string Role { get; set; }
}
  1. Génération du jeton: Créez une méthode pour générer le JWT.
public static string GenerateJwtToken(JwtPayload payload)
{
    var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(SecretKeys.SecretKey));
    var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);

    var tokenDescriptor = new SecurityTokenDescriptor
    {
        Subject = new ClaimsIdentity(new[]
        {
            new Claim(ClaimTypes.NameIdentifier, payload.Id.ToString()),
            new Claim(ClaimTypes.Name, payload.Username),
            new Claim(ClaimTypes.Role, payload.Role)
        }),
        Expires = DateTime.UtcNow.AddMinutes(30),
        SigningCredentials = credentials
    };

    var tokenHandler = new JwtSecurityTokenHandler();
    var token = tokenHandler.CreateToken(tokenDescriptor);

    return tokenHandler.WriteToken(token);
}

Validation de JWT

  1. Définition des attributs d'autorisation: Utilisez les attributs Authorize et [Authorize(Roles = "Admin")] pour appliquer des politiques d'autorisation aux contrôleurs et aux actions.

  2. Récupération des informations du jeton: Dans les contrôleurs, vous pouvez récupérer les informations du jeton à l'aide du contexte HttpContext.

public class MyController : ControllerBase
{
    public IActionResult GetSecretData()
    {
        var userId = User.FindFirst(ClaimTypes.NameIdentifier).Value;
        // ...
    }
}

Conclusion

L'authentification JWT est un moyen efficace et sécurisé d'authentifier les utilisateurs dans les API Web ASP.NET Core 7. En utilisant les étapes décrites dans cet article, vous pouvez facilement implémenter l'authentification JWT dans votre application. N'oubliez pas de suivre les meilleures pratiques de sécurité et de gérer les clés secrètes de manière appropriée.

Featured Posts