oAuthService에 Jwt 토큰을 발급하는 메서드를 추가했다.
public String generateJwtToken(MemberInfoDto info) {
Map<String, Object> payloads = new HashMap<>();
Map<String, Object> headers = new HashMap<>();
headers.put("alg", "HS256");
headers.put("typ", "JWT");
payloads.put("name",info.getName());
payloads.put("picture", info.getPicture());
payloads.put("oauthId",info.getSub());
return Jwts.builder()
.setHeader(headers)
.setClaims(payloads)
.setIssuedAt(new Date(System.currentTimeMillis()))
.setExpiration(new Date(System.currentTimeMillis()+60*1000*60))
.signWith(SignatureAlgorithm.HS256, secretKey)
.compact();
}
- setIssuedAt : 발행 시간
- setExpiration : 토큰 만료 시간
@Test
void testJwtTokenExpiration() {
String jwt = Jwts.builder()
// 토큰 빌드...
.compact();
Date expiration = Jwts.parser()
.setSigningKey(key.getBytes())
.parseClaimsJws(jwt)
.getBody()
.getExpiration();
assertThat(expiration.after(new Date(System.currentTimeMillis()))).isTrue();
assertThat(expiration.before(new Date(System.currentTimeMillis()))).isFalse();
}
테스트를 통해 위처럼 만료되었는지 확인하면 된다.
컨트롤러 코드도 다음과 같이 변경했다.
@GetMapping("callback/google")
public ResponseEntity<MemberInfoDto> successGoogleLogin(
@RequestParam("code") String accessCode,
HttpServletResponse response
) {
MemberInfoDto result = oAuthService.getGoogleOAuthMemberInfo(accessCode);
String accessToken = oAuthService.generateJwtToken(result);
Cookie cookie = new Cookie("access_token",accessToken);
cookie.setMaxAge(60*60*24*7);
cookie.setHttpOnly(true);
cookie.setPath("/");
response.addCookie(cookie);
return ResponseEntity.ok().body(result);
}
해독도 정상적으로 되고
응답에 쿠키가 제대로 추가된 것을 확인할 수 있다!
아주 나이스 (*ᴗ͈ˬᴗ͈)ꕤ*.゚
'Project > 모면' 카테고리의 다른 글
프론트엔드는 TDD가 필수인 것 같다 (0) | 2023.04.11 |
---|---|
[Spring Boot] 테스트 코드에서 프로퍼티 NullPointerException 오류 해결 (0) | 2023.04.06 |
[Spring Boot] Security 없이 OAuth2 Google에서 받은 id_token 사용해 회원 정보 저장하기 (1) | 2023.04.03 |
[Spring Boot] 면접 질문 카테고리 분류하기 (0) | 2023.04.01 |
도망친 곳엔 낙원은 없다 (0) | 2023.03.29 |