ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JWT 토큰 체크
    스프링 2023. 1. 19. 21:05
    public boolean tokenValid(String token) {
        try {
            Jws<Claims> claimsJws = Jwts.parserBuilder().setSigningKey(secretKey).build().parseClaimsJws(token);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    토큰이 만료 되었는지 체크하는 로직이다.

    토큰에서 헤더인 "AccessToken"를 뽑아낸 다음

    유효하면 true를 리턴하고, 그렇지 않으면 false를 return하도록 한다.

     

    claim으로 변환도중 다음과 같은 예외가 발생한다.

     

    1) ExpiredJwtException : JWT를 생성할 때 지정한 유효기간 초과할 때.

    2) UnsupportedJwtException : 예상하는 형식과 일치하지 않는 특정 형식이나 구성의 JWT일 때

    3) MalformedJwtException : JWT가 올바르게 구성되지 않았을 때

    4) SignatureException :  JWT의 기존 서명을 확인하지 못했을 때

    5) IllegalArgumentException

     

    예외가 발생하면 유효하지 않은 토큰으로 판단 한다.

     

    다음과 같은 방식으로 유효일자 까지 한번에 체크할 수 도 있다.

    public boolean validateToken(String jwtToken) {
            try {
                Jws<Claims> claims = Jwts.parser().setSigningKey(secretKey).parseClaimsJws(jwtToken);
                return !claims.getBody().getExpiration().before(new Date());
            } catch (Exception e) {
                return false;
            }
        }

     

    JWT의 생김새는 이와같이 생겼다.

     

     

     

    헤더(header)

    유형(typ)과 알고리즘(alg) 정보를 담음. 보통 HMAC SHA256을 사용.

    유형(typ)은 토큰의 타입을 지정하며 여기서는 JWT로 지정.

     

    정보(payload)

    name / value 한쌍으로 이루어져 있으며 토큰에는 여러개의 클레임을 넣을 수 있음.

    시스템에서 실제로 사용될 정보에 대한 내용들을 담음

    iss: 토큰

    sub: 토큰 제목 (subject)

    exp: 만료시간 (expiration)

    iat: 토큰 발급 시간 (issued at)

    aud: 토큰 대상자(audience)

     

     

    토큰 정보를 가져오기

     

    public String getUid(String token) {
        return Jwts.parserBuilder()
                .setSigningKey(secretKey)
                .build()
                .parseClaimsJws(token)
                .getBody().getSubject();
    }

    getBody로 payLoad의 정보를 가져온 후, getSubject로 토큰의 제목을 가져온다.

     

     

    728x90

    '스프링' 카테고리의 다른 글

    OAuth2.0과 JWT적용 - 3  (0) 2023.01.25
    UsernamePasswordAuthenticationFilter  (0) 2023.01.19
    OAuth2.0과 JWT적용 - 2  (0) 2023.01.17
    OAuth2.0과 JWT적용 - 1  (0) 2023.01.17
    security버전  (0) 2023.01.15

    댓글

Designed by Tistory.