>백엔드 개발 >C++ >ASP.NET 웹 API에서 JWT 인증을 구현하는 방법은 무엇입니까?

ASP.NET 웹 API에서 JWT 인증을 구현하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-20 21:59:12752검색

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

ASP.NET 웹 API에서 JWT 인증 구현

JWT 개요

JWT(JSON 웹 토큰)는 마침표로 구분된 세 개의 base64 인코딩 부분으로 인코딩된 청구를 포함하는 토큰입니다. 클레임에는 사용자, 해당 권한 및 만료 시간에 대한 정보가 포함됩니다.

JWT 인증 구현

기존 웹 API에서 JWT 인증을 구현하려면 다음 단계를 따르세요.

JWT 토큰 생성

  • 컨트롤러 작업을 사용하여 JWT 생성 엔드포인트를 만듭니다.
  • HMACSHA256 및 대칭 키를 사용하여 JWT 토큰을 생성하려면 System.IdentityModel.Tokens.Jwt 패키지를 사용하세요.

JWT 토큰 확인

  • IAuthenticationFilter에서 상속된 JWT 인증 속성을 만듭니다.
  • 이 속성을 사용하여 인증이 필요한 작업을 장식합니다.
  • JWT 토큰을 확인하려면 인증 필터에 AuthenticateJwtToken 메소드를 구현하세요.
  • 확인된 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 웹 API에서 JWT 인증을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.