首頁 >後端開發 >C++ >如何在 ASP.NET Web API 中實作 JWT 驗證?

如何在 ASP.NET Web API 中實作 JWT 驗證?

Patricia Arquette
Patricia Arquette原創
2025-01-20 21:59:12792瀏覽

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

在ASP.NET Web API中實作JWT驗證

JWT概述

JSON Web令牌(JWT)是包含聲明的令牌,這些聲明被編碼為三個用句點分隔的base64編碼部分。聲明包含有關使用者、其權限和過期時間的資訊。

實作JWT驗證

要在您的舊版Web API中實作JWT驗證,您可以按照以下步驟操作:

產生JWT令牌

  • 使用控制器操作建立一個JWT產生端點。
  • 使用System.IdentityModel.Tokens.Jwt包,使用HMACSHA256和對稱金鑰產生JWT令牌。

驗證JWT令牌

  • 建立一個從IAuthenticationFilter繼承的JWT驗證屬性。
  • 使用該屬性來裝飾需要身份驗證的操作。
  • 在您的驗證篩選器中實作AuthenticateJwtToken方法以驗證JWT令牌。
  • 使用已驗證的ClaimsPrincipal建立具有附加資訊(例如角色)的本地識別。

配置

  • 使用config.Filters.Add(new AuthorizeAttribute())為您的API啟用授權。

程式碼範例

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

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

以上是如何在 ASP.NET Web API 中實作 JWT 驗證?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn