ホームページ >バックエンド開発 >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) は、ピリオドで区切られた 3 つの Base64 エンコード部分にエンコードされたクレームを含むトークンです。クレームには、ユーザー、その権限、有効期限に関する情報が含まれています。

JWT 認証の実装

従来の Web API に JWT 認証を実装するには、次の手順に従います。

JWT トークンを生成します

  • コントローラー アクションを使用して JWT 生成エンドポイントを作成します。
  • System.IdentityModel.Tokens.Jwt パッケージを使用して、HMACSHA256 と対称キーを使用して JWT トークンを生成します。

JWT トークンを検証します

  • IAuthenticationFilter から継承した JWT 認証属性を作成します。
  • この属性を使用して、認証が必要な操作を修飾します。
  • 認証フィルターに AuthenticateJwtToken メソッドを実装して、JWT トークンを検証します。
  • 検証済みの ClaimsPrincipal を使用して、ロールなどの追加情報を含むローカル ID を作成します。

構成

  • 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。