ASP.NET Core JWT 토큰 생성 교과서 코드

 

JWT(JSON Web Token) 토큰은 클라이언트와 서버 간의 인증을 위해 사용되는 기술입니다. JWT 토큰은 클레임(Claim)을 기반으로 생성되며, 이 클레임은 사용자의 식별정보를 가지고 있습니다.

 

아래의 코드는 JWT 토큰을 생성하는 과정을 보여주는 것입니다.

/// <summary>
/// 토큰 생성: JWT 토큰 생성 교과서 코드
/// TODO: Claim 추가 및  JwtSecurityToken에 issuer 등의 추가 매개 변수 지정
/// </summary>
private string CreateToken(SignViewModel model)
{
    //[1] 클레임 생성
    var claims = new Claim[]
    {
        new Claim(JwtRegisteredClaimNames.Sub, model.Email),
        new Claim(JwtRegisteredClaimNames.Email, model.Email),
        new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
    };

    //[2] 보안키 생성
    var key = _configuration.GetSection("SymmetricSecurityKey").Value;
    var securityKey =
        new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key));
    var signingCredentials =
        new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);

    //[3] 토큰 생성하기
    var token = new JwtSecurityToken(
        issuer: "https://localhost:5001/", // 내용 채울 것
        audience: "DotNetNote", // 내용 채울 것            
        expires: DateTime.UtcNow.AddMinutes(5),

        claims: claims,
        signingCredentials: signingCredentials
    );
    var jwtToken = new JwtSecurityTokenHandler().WriteToken(token);

    //[!] 토큰 반환 
    return jwtToken;
}

[1] 클레임 생성: JWT 토큰은 클레임을 기반으로 생성됩니다. 클레임에는 사용자의 식별정보가 담겨 있습니다. 예를 들어, 이메일, 사용자 ID 등이 클레임에 포함될 수 있습니다. 이 예제에서는 SignViewModel 객체에서 Email 값을 가져와 클레임에 포함시키고 있습니다.

 

[2] 보안키 생성: JWT 토큰을 생성하기 위해서는 보안키가 필요합니다. 이 예제에서는 appsettings.json 파일에서 SymmetricSecurityKey 값을 가져와 보안키를 생성하고 있습니다. 그리고, 이 보안키를 사용하여 SigningCredentials 객체를 생성합니다. 이 객체는 JWT 토큰을 서명하는데 사용됩니다.

 

[3] 토큰 생성하기: 이제 JWT 토큰을 생성할 수 있습니다. JwtSecurityToken 객체를 생성하고, 필요한 파라미터를 지정합니다. 예를 들어, issuer, audience, 클레임, 만료시간, 서명자 인증 등이 파라미터로 지정됩니다. 그리고, 생성된 토큰을 JwtSecurityTokenHandler 객체를 사용하여 문자열 형태로 변환하여 반환합니다.

 

위의 코드는 JWT 토큰 생성의 기본적인 구조를 보여주고 있습니다. JWT 토큰은 보안에 매우 중요한 역할을 하기 때문에, 적절한 보안 절차와 알고리즘을 적용하여 토큰을 생성하는 것이 중요합니다.

 

참고: 위의 코드에서 지정하지 않은 issuer, audience 등의 파라미터는 실제 개발 환경에 맞게 적절에서 지정해야 합니다. 예를 들어, issuer는 토큰을 발행한 주체를 나타내며, audience는 토큰을 사용하려는 주체를 나타냅니다. 또한, 만료시간을 적절하게 지정하여 토큰의 유효기간을 제어할 수 있습니다.

 

앞으로 JWT 토큰을 생성하는 과정에서는 보안적인 측면을 고려하여 개발하는 것이 중요합니다. 이를 위해서는 보안 키의 암호화 방식, 클레임의 보안적인 관리 방식, 알고리즘의 선택 등을 고려하여 개발하는 것이 좋습니다.

 

Comments


Comments are closed