[Java] JWT 토큰

19·2022년 9월 13일
0

Java

목록 보기
7/13

JWT의 구성

토큰은 크게 3가지로 나누어져 있다

토큰타입과 암호화 알고리즘이 포함되어야 한다.
Map<String, Object>

Payload

토큰에 담을 내용이 포함되는 곳이다.
데이터, 토큰 발급대상, 토큰 만료기간, 토큰 수령자등등
Map<String, Object>

Signature

서명을 하는 부분이다.
Jwts.builder()sighwith()메소드를 사용한다.
첫번째 매개변수로 해시 알고리즘, 두번째 매개변수로 jwt 복호화에 사용할 key의 바이트를 기입한다 (.getBytes())


사용하기

dependency 추가하기

implementation group: 'io.jsonwebtoken', name: 'jjwt', version: '0.9.1'

JWT를 사용하기 위해 jjwt를 사용

토큰 생성

...
@Value("${secret.jwt.key}")
private String secretKey;
    
public String generateToken(String email) {
		// Header
		Map<String, Object> headers = new HashMap<>();
        headers.put("typ", "JWT");
        headers.put("alg", "HS256");
        
        // Payload
        Map<String, Object> payloads = new HashMap<>();
        payloads.put("data", email);
        
        Date currentDate = new Date();
        Date expirationDate = new Date(currentDate.getTime() + expiration);
        
        return Jwts.builder()
                .setHeader(headers)
                .setClaims(payloads)
                .setIssuedAt(currentDate)
                .setExpiration(expirationDate)
                .signWith(SignatureAlgorithm.HS256, secretKey.getBytes()) // Signature
                .compact();
}
...

Map<String, Object>를 사용해 Header와 Payload를 담았다.
Jwts.builder()를 통해 Header, Claim, Signature를 세팅하고 compact()로 토큰 생성

토큰 파싱

public String getMemberEmailFromToken(String token) {
        Claims claims = Jwts.parser()
                .setSigningKey(secretKey.getBytes())
                .parseClaimsJws(token)
                .getBody();
                
        String email = claims.get("data", String.class);
}

서명했던 secretKey로 set하고, parseClaimsJws()를 통해 토큰을 Jws로 파싱 후, getBody()를 사용해 'data'로 저장했던 email를 꺼낸다.


참고

https://galid1.tistory.com/588

profile
하나씩 차근차근

0개의 댓글