-
OAuth2.0과 JWT적용 - 2스프링 2023. 1. 17. 19:29
토큰을 발급하고 검증 할 수 있는 컴포넌트를 작성한다.
토큰은 API서버에 접근하기 위한 인증 토큰과 인증 토큰이 만료되었을 경우 리프레쉬에 사용할 리프레쉬 토큰으로 이루어져 있다.
@NoArgsConstructor @Getter public class Token { private String accessToken; private String refreshToken; public Token(String token, String refreshToken) { this.accessToken = token; this.refreshToken = refreshToken; } }
토큰을 발행해주는 tokenService를 구한다.
@Service public class TokenService{ private String secretKey = "token-secret-key"; @PostConstruct protected void init() { secretKey = Base64.getEncoder().encodeToString(secretKey.getBytes()); } public Token generateToken(String uid, String name) { long tokenPeriod = 1000L * 60L * 10L; long refreshPeriod = 1000L * 60L * 60L * 24L * 30L * 3L; Claims claims = Jwts.claims().setSubject(uid); claims.put("name", name); Date now = new Date(); return new Token(Jwts.builder() .setClaims(claims) // 정보 저장 .setIssuedAt(now) // 토큰 발행 시간 정보 .setExpiration(new Date(now.getTime() + tokenPeriod)) // 토큰 유효시각 설정 .signWith(Keys.hmacShaKeyFor(Decoders.BASE64.decode(secretKey)), SignatureAlgorithm.HS256) // 암호화 알고리즘과, secret 값 .compact(), Jwts.builder() .setClaims(claims) .setIssuedAt(now) .setExpiration(new Date(now.getTime() + refreshPeriod)) // refresh기간 설정 .signWith(Keys.hmacShaKeyFor(Decoders.BASE64.decode(secretKey)), SignatureAlgorithm.HS256) .compact()); } public String getUid(String token) { return Jwts.parserBuilder() .setSigningKey(secretKey) .build() .parseClaimsJws(token) .getBody().getSubject(); } }
728x90'스프링' 카테고리의 다른 글
UsernamePasswordAuthenticationFilter (0) 2023.01.19 JWT 토큰 체크 (0) 2023.01.19 OAuth2.0과 JWT적용 - 1 (0) 2023.01.17 security버전 (0) 2023.01.15 [Test] Mockito 기반의 Spring 단위 테스트 (0) 2023.01.12