JWT 소개 및 사용법

JWT는 JSON Web Token의 약자로, 양 당사자 간에 안전하게 정보를 전달하기 위한 간결하고 URL 안전한 표현 형식입니다. JWT는 RFC 7519로 정의된 오픈 표준으로, JSON 객체 형태로 통신하는 두 당사자 간에 간결하고 자가 포함된 방법을 제공합니다. 디지털 서명 덕분에 이 정보는 신뢰할 수 있으며, JWT는 HMAC 알고리즘 또는 RSA 공개/비밀 키 쌍을 사용하여 서명할 수 있습니다.

VS 프로젝트에서

패키지 관리자 콘솔을 열고 다음 명령어를 실행하여 JWT 패키지를 설치합니다.

Install-Package JWT

다음 네임스페이스를 추가합니다.

using JWT;
using JWT.Algorithms;
using JWT.Serializers;
using System;
using System.Collections.Generic;
using System.Text;

JwtTools 클래스 생성

namespace Repository
{
    public class JwtTools
    {
        public static string Encode(Dictionary<string, object> payload, string key)
        {
            IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
            IJsonSerializer serializer = new JsonNetSerializer();
            IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
            IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
            return encoder.Encode(payload, key);
        }

        public static string Decode(string token, string key)
        {
            try
            {
                IJsonSerializer serializer = new JsonNetSerializer();
                IDateTimeProvider provider = new UtcDateTimeProvider();
                IJwtValidator validator = new JwtValidator(serializer, provider);

                IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
                IJwtDecoder decoder = new JwtDecoder(serializer, validator, urlEncoder);
                return decoder.Decode(token, key, verify: true);
            }
            catch (TokenExpiredException)
            {
                throw new Exception("토큰이 만료되었습니다.");
            }
            catch (SignatureVerificationException)
            {
                throw new Exception("잘못된 서명을 가진 토큰입니다.");
            }
        }

        public static string ValidateLogin(string request, string key)
        {
            if (string.IsNullOrEmpty(request))
            {
                throw new Exception("로그인해주세요.");
            }
            return Decode(request, key);
        }
    }
}

사용 예시

string key = "123";
// 인코딩
string encodedToken = JwtTools.Encode(new Dictionary<string, object> {
    { "UserId", userinfo.UserId },
    { "UserName", userinfo.UserName }
}, key);

// 디코딩
string decodedPayload = JwtTools.ValidateLogin(encodedToken, key);

더 많은 정보는 공식 웹사이트에서 확인하세요: https://jwt.io/

태그: jwt C# HMAC RSA JsonWebToken

10월 7일 22:38에 게시됨