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
Patricia Arquetteoriginal
2025-01-20 21:59:12810parcourir

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 :

<code class="language-csharp">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;
}</code>

Vérifier le jeton JWT :

<code class="language-csharp">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;
}</code>

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:
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