JWT 기반 SSO(통합 로그인) 프로젝트를 진행하면서 토큰 발급/검증 로직을 직접 구현해봤습니다. jjwt 라이브러리로 만든 JwtTokenProvider 클래스를 간단히 정리했습니다.
* Single Sign-On(싱글 사인온)
JWT란
JWT(JSON Web Token)는 헤더, 페이로드, 서명을 점(.)으로 이어붙인 문자열입니다. 서버가 로그인 성공 시 Access Token을 발급하면, 클라이언트는 이후 요청마다 이 토큰을 전송하고, 서버는 토큰의 서명을 검증하여 토큰의 유효성을 확인하고 사용자를 식별합니다.

코드
java
public class JwtTokenProvider {
private final SecretKey secretKey;
private final long validityMs;
public JwtTokenProvider(String base64Secret, long validityMs) {
this.secretKey = Keys.hmacShaKeyFor(Decoders.BASE64.decode(base64Secret));
this.validityMs = validityMs;
}
// 토큰 생성
public String generateToken(String userId, String role) {
Date now = new Date();
Date expiry = new Date(now.getTime() + validityMs);
return Jwts.builder()
.subject(userId)
.claim("role", role)
.issuedAt(now)
.expiration(expiry)
.signWith(secretKey)
.compact();
}
// 토큰 검증
public boolean validateToken(String token) {
try {
Jwts.parser().verifyWith(secretKey).build().parseSignedClaims(token);
return true;
} catch (ExpiredJwtException e) {
return false; // 만료
} catch (Exception e) {
return false; // 위조/오류
}
}
// 토큰에서 사용자 정보 꺼내기
public String getUserId(String token) {
return Jwts.parser().verifyWith(secretKey).build()
.parseSignedClaims(token).getPayload().getSubject();
}
}
generateToken은 사용자 ID와 권한(role)을 넣고 만료시간을 설정해 서명된 토큰 문자열을 만듭니다. validateToken은 서명이 맞는지, 만료되지 않았는지만 확인합니다. getUserId는 검증을 통과한 토큰에서 원래 누구였는지 꺼내는 용도입니다. 시크릿 키는 코드에 직접 쓰지 않고 Base64 문자열로 외부에서 주입받습니다.
* “Base64는 바이너리 데이터를 문자로 표현하기 위한 인코딩 방식
'DEV > SpringBoot' 카테고리의 다른 글
| [Spring Boot] 스프링 시큐리티(Spring Security) 개념과 기본 사용법 (0) | 2026.09.08 |
|---|---|
| [Spring Boot] ZXing으로 QR 코드 생성 API 만들기 (0) | 2026.08.31 |
| [SpringBoot] module java.base does not open java.lang 에러 (0) | 2023.03.20 |
| [SpringBoot] WebSecurityConfigurerAdapter 취소선 😀 (0) | 2023.01.10 |
| [SpringBoot] Execution failed for task ':test'. 에러 (0) | 2022.10.20 |