Maison > développement back-end > C++ > Comment implémenter l'authentification JWT dans l'API Web ASP.NET ?

Comment implémenter l'authentification JWT dans l'API Web ASP.NET ?

Patricia Arquette
Libérer: 2025-01-20 21:59:12
original
802 Les gens l'ont consulté

How to Implement JWT Authentication in ASP.NET Web API?

Implémentation de l'authentification JWT dans l'API Web ASP.NET

Présentation de JWT

Un jeton Web JSON (JWT) est un jeton qui contient des revendications codées en trois parties codées en base64 séparées par des points. La revendication contient des informations sur l'utilisateur, ses autorisations et le délai d'expiration.

Mise en œuvre de l'authentification JWT

Pour implémenter l'authentification JWT dans votre ancienne API Web, vous pouvez suivre ces étapes :

Générer un jeton JWT

  • Créez un point de terminaison de génération JWT à l'aide d'une action de contrôleur.
  • Utilisez le package System.IdentityModel.Tokens.Jwt pour générer des jetons JWT à l'aide de HMACSHA256 et de clés symétriques.

Vérifier le jeton JWT

  • Créez un attribut d'authentification JWT hérité de IAuthenticationFilter.
  • Utilisez cet attribut pour décorer les opérations qui nécessitent une authentification.
  • Implémentez la méthode AuthenticateJwtToken dans votre filtre d'authentification pour vérifier le jeton JWT.
  • Utilisez un ClaimsPrincipal vérifié pour créer une identité locale avec des informations supplémentaires telles que des rôles.

Configuration

  • Utilisez config.Filters.Add(new AuthorizeAttribute()) pour activer l'autorisation pour votre API.

Exemple de code

Générer un jeton JWT :

private const string Secret = "[对称密钥]";

public static string GenerateToken(string username, int expireMinutes = 20)
{
    var symmetricKey = Convert.FromBase64String(Secret);
    var tokenHandler = new JwtSecurityTokenHandler();

    var now = DateTime.UtcNow;
    var tokenDescriptor = new SecurityTokenDescriptor {
        Subject = new ClaimsIdentity(new[] {
            new Claim(ClaimTypes.Name, username)
        }),
        Expires = now.AddMinutes(Convert.ToInt32(expireMinutes)),
        SigningCredentials = new SigningCredentials(
            new SymmetricSecurityKey(symmetricKey),
            SecurityAlgorithms.HmacSha256Signature)
    };

    var stoken = tokenHandler.CreateToken(tokenDescriptor);
    var token = tokenHandler.WriteToken(stoken);

    return token;
}
Copier après la connexion

Vérifier le jeton JWT :

protected Task<IPrincipal> AuthenticateJwtToken(string token)
{
    string username;

    if (ValidateToken(token, out username))
    {
        var claims = new List<Claim> {
            new Claim(ClaimTypes.Name, username)
            // 根据需要添加更多声明
        };

        var identity = new ClaimsIdentity(claims, "Jwt");
        var user = new ClaimsPrincipal(identity);

        return Task.FromResult(user);
    }

    return Task.FromResult<IPrincipal>(null);
}

private static bool ValidateToken(string token, out string username)
{
    username = null;

    var tokenHandler = new JwtSecurityTokenHandler();
    var jwtToken = tokenHandler.ReadToken(token) as JwtSecurityToken;

    if (jwtToken == null) return false;

    var symmetricKey = Convert.FromBase64String(Secret);

    var validationParameters = new TokenValidationParameters {
        RequireExpirationTime = true,
        ValidateIssuer = false,
        ValidateAudience = false,
        IssuerSigningKey = new SymmetricSecurityKey(symmetricKey)
    };

    var principal = tokenHandler.ValidateToken(token, validationParameters, out _);

    return principal != null;
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal