Heim >Backend-Entwicklung >C++ >Wie implementiert man die JWT-Authentifizierung in der ASP.NET-Web-API?

Wie implementiert man die JWT-Authentifizierung in der ASP.NET-Web-API?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-20 21:59:12752Durchsuche

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

JWT-Authentifizierung in der ASP.NET-Web-API implementieren

JWT-Übersicht

Ein JSON Web Token (JWT) ist ein Token, das Ansprüche enthält, die in drei durch Punkte getrennte Base64-codierte Teile codiert sind. Der Anspruch enthält Informationen über den Benutzer, seine Berechtigungen und die Ablaufzeit.

JWT-Authentifizierung implementieren

Um die JWT-Authentifizierung in Ihrer alten Web-API zu implementieren, können Sie die folgenden Schritte ausführen:

JWT-Token generieren

  • Erstellen Sie einen JWT-Generierungsendpunkt mithilfe einer Controller-Aktion.
  • Verwenden Sie das System.IdentityModel.Tokens.Jwt-Paket, um JWT-Tokens mit HMACSHA256 und symmetrischen Schlüsseln zu generieren.

JWT-Token überprüfen

  • Erstellen Sie ein von IAuthenticationFilter geerbtes JWT-Authentifizierungsattribut.
  • Verwenden Sie dieses Attribut, um Vorgänge zu dekorieren, die eine Authentifizierung erfordern.
  • Implementieren Sie die AuthenticateJwtToken-Methode in Ihrem Authentifizierungsfilter, um das JWT-Token zu überprüfen.
  • Verwenden Sie einen verifizierten ClaimsPrincipal, um eine lokale Identität mit zusätzlichen Informationen wie Rollen zu erstellen.

Konfiguration

  • Verwenden Sie config.Filters.Add(new AuthorizeAttribute()), um die Autorisierung für Ihre API zu aktivieren.

Codebeispiel

JWT-Token generieren:

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

JWT-Token überprüfen:

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

Das obige ist der detaillierte Inhalt vonWie implementiert man die JWT-Authentifizierung in der ASP.NET-Web-API?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn