Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Melaksanakan Pengesahan JWT dalam API Web ASP.NET?

Bagaimana untuk Melaksanakan Pengesahan JWT dalam API Web ASP.NET?

Patricia Arquette
Patricia Arquetteasal
2025-01-20 21:59:12750semak imbas

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

Melaksanakan Pengesahan JWT dalam API Web ASP.NET

Ikhtisar JWT

Token Web JSON (JWT) ialah token yang mengandungi tuntutan yang dikodkan kepada tiga bahagian berkod base64 yang dipisahkan oleh noktah. Tuntutan mengandungi maklumat tentang pengguna, kebenaran mereka dan masa tamat tempoh.

Melaksanakan pengesahan JWT

Untuk melaksanakan pengesahan JWT dalam API Web lama anda, anda boleh mengikuti langkah berikut:

Jana token JWT

  • Buat titik akhir generasi JWT menggunakan tindakan pengawal.
  • Gunakan pakej System.IdentityModel.Tokens.Jwt untuk menjana token JWT menggunakan HMACSHA256 dan kekunci simetri.

Sahkan token JWT

  • Buat atribut pengesahan JWT yang diwarisi daripada IAuthenticationFilter.
  • Gunakan atribut ini untuk menghiasi operasi yang memerlukan pengesahan.
  • Laksanakan kaedah AuthenticateJwtToken dalam penapis pengesahan anda untuk mengesahkan token JWT.
  • Gunakan ClaimsPrincipal yang disahkan untuk mencipta identiti setempat dengan maklumat tambahan seperti peranan.

Tatarajah

  • Gunakan config.Filters.Add(new AuthorizeAttribute()) untuk mendayakan kebenaran untuk API anda.

Contoh Kod

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

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

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pengesahan JWT dalam API Web ASP.NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn