본문 바로가기

개발 일지/TIL

[#51] TIL - JWT Secret Key 생성하는 법

✏️ 0903      


한 달 인턴 - 온보딩 과제


 

JWT 토큰 유효성 검사 메서드에 대한 테스트 코드를 작성해봤다

public boolean validateToken(String token) {
    try {
        verifySignature(token);

        Claims claims = getUserInfoFromToken(token);
        if (claims.getExpiration().before(new Date())) {
            throw new CustomException(ErrorEnum.TOKEN_EXPIRATION);
        }
        return true;
    } catch (ExpiredJwtException e) {
        throw new CustomException(ErrorEnum.TOKEN_EXPIRATION);
    } catch (MalformedJwtException e) {
        throw new CustomException(ErrorEnum.INVALID_TOKEN_FORMAT);
    } catch (SecurityException e) {
        throw new CustomException(ErrorEnum.INVALID_TOKEN_SIGNATURE);
    } catch (JwtException e) {
        throw new CustomException(ErrorEnum.INVALID_TOKEN);
    } catch (IllegalArgumentException e) {
        throw new CustomException(ErrorEnum.FALSE_TOKEN);
    }
}

 

미리 토큰을 만들기 위해 setup 하려고 하니까 test용 secretKey 값을 줘야하는데

원래 쓰는 건 .env 파일에 넣어서 재사용하기엔 좀 그래서 새롭게 만들어보는 방법을 찾아봤다

아무렇게나 넣어도 되나 했는데 안되더라 ㄲㅂ (될리가 있니)

 

 

cmd 를 활용해 랜덤으로 시크릿키를 생성하는 방법이다

 

ver.Windows

 

Windows PowerShell 이라는 프로그램에 들어가서

아래의 코드를 순서대로 넣어주면 위의 사진처럼 만들어준다

$key = New-Object byte[] 64
[System.Security.Cryptography.RandomNumberGenerator]::Create().GetBytes($key)
$base64Key = [System.Convert]::ToBase64String($key)
$base64Key

 

 

ver.Lunxs

리눅스 사용을 안해서 사진은 없...을 예정이었는데 예전에 VirtualBox 를 통해 가상머신 만들어둔게 있다...ㅋㅋ

 

OpenSSL 을 사용해서 아래의 코드를 입력해주면 자동으로 생성해준다

openssl rand -base64 64

 

 

테스트 코드 준비 완료!

@ExtendWith(MockitoExtension.class)
class JwtUtilTest {

    @InjectMocks
    private JwtUtil jwtUtil;

    private String secretKey = "pB+EU94ugGpGZeRZh7pPi+aW1Jcv3uE9Zs1y2rBOw3IFJY/1ttMyz3K438sUyzQQdNAluzR3a9x+M0ZRyeuNhw==";
    private Key key;
    private String token;

    @BeforeEach
    public void setUp() {
        byte[] keyBytes = secretKey.getBytes(StandardCharsets.UTF_8);
        key = Keys.hmacShaKeyFor(keyBytes);
        jwtUtil.setSECRET_KEY(secretKey);
        jwtUtil.init();

        token = Jwts.builder()
            .setSubject("testUser")
            .claim("auth", "USER")
            .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60))
            .signWith(key, SignatureAlgorithm.HS256)
            .compact();
    }

 

 

나만 모르는 기능이었나..? ㅜㅜ

'개발 일지 > TIL' 카테고리의 다른 글

[ #50 ] TIL  (0) 2024.06.26
[ #47 ] TIL  (0) 2024.06.22
[ #46 ] TIL  (0) 2024.06.20
[ #45 ] TIL  (0) 2024.06.19
[ #44 ] TIL  (0) 2024.06.18