JWT 발급부분 코드분석
2023. 4. 6. 14:26ㆍWEB
//토큰 생성 메서드
public String create(UserDetails userDetails) {
Date expiryDate = Date.from(Instant.now().plus(30, ChronoUnit.DAYS)); //-토큰 종료 날짜
return Jwts.builder()
.signWith(SignatureAlgorithm.HS512, SECRET_KEY) // 시크릿 키는 토큰을 암호화하거나 복호화 할때 사용된다.
// HS512는 암호화 알고리즘으로, 시크릿 키와 HS512를 통해 암,복호화 하는것이다.
.setSubject(userDetails.getUsername()) // JWT의 서브젝트를 생성하는 부분 서브젝트 : 사용자의 식별자(사용자를 식별할수 있는 무언가),발급되는 대상을 지정하는것
.setIssuer("room app") // 발급자 설정. 해당 JWT을 발급한 대상
.setIssuedAt(new Date()) // 발급 시작 시점
.setExpiration(expiryDate) // 발급 종료 시점
.compact(); // JWT을 문자열로 반환
}
//토큰을 매개값으로 받아서 시크릿 키를 이용해 복호화 하는 메서드
public String validateAndGetUserId(String token) {
Claims claims = Jwts.parser() // JWT 검증 파서 생성
.setSigningKey(SECRET_KEY) // 시크릿키 설정
.parseClaimsJws(token) // 검증된 JWT을 파싱 (불러옴)
.getBody(); // 파싱된 JWT의 BODY를 불러옴
return claims.getSubject(); // 해독한 token값을 보냄
}
//그렇다면 이 메소드는 사용자의 세션에 있는 토큰을 불러와서 사용자의 식별자를 리턴하고
//서버는 이 식별자를 통해서 SecurityContextHolder에 인증되어있는 사용자를 검증한다. 만약 있으면 사용자의 정보를 가지고
// 무언가를 수행한다.
//그렇다면 토큰만 있으면 인증에 성공하니까 토큰을 탈취해가면 다른사람도 내 정보를 가지고 인증할수있는 일이 벌어진다.
//이를 방지하기 위해서 토큰의 수명주기를 짧게한다.
'WEB' 카테고리의 다른 글
세션과 쿠키 (0) | 2023.04.14 |
---|---|
스프링 시큐리티 로그인 코드 분석 (0) | 2023.04.06 |
클라이언트의 요청 방식 (0) | 2023.04.02 |