SpringBoot에서 HttpOnly 쿠키방식을 이용한 refreshToken 발급

2021. 2. 27. 18:28·Tech/Spring

jwt의 access_token과 refresh_token를 구현하는 과정에서 프로젝트 프론트 팀원분이 

refresh_token은 쿠키에 담아서 전송해달라는 요청이 들어왔다. 

과정은 대략 아래와 같다.

 

https://velog.io/@yaytomato/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%90%EC%84%9C-%EC%95%88%EC%A0%84%ED%95%98%EA%B2%8C-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0

전송방식은 Http Only 방식으로 쿠키에 담아 전송하였다.

 

httpOnly란 Set-Cookie HTTP reponse 헤더에 포함되는 flagf이다.

cookie를 생성할 때 HttpOnly를 사용하는 것은 브라우저가 HttpOnly를 지원할 경우 쿠키는 클라이언트 측 스크립트에 접근할 수 없다. 악성 스크립트(XSS 공격)에 의한 위험을 완화시켜준다.

 

즉, http only 쿠키 방식으로 저장된 정보는 Javscript의 Document.cookieAPI로 접근이 불가능하다. 따라서 XSS 취약점 공격으로 담긴 값을 불러올 수 없다. 또한 CSRF 공격도 막을 수 있다.

 

로그인 이후 서버에선 refreshToken은 Header의 Set-Cookie에 담고 accessToken은 JSON Body에 담아서 보내기로 정하였다.

 

예제 코드

@GetMapping("/login")
@ResponseBody
public ResponseEntity<?> login(@RequestBody String credentials, HttpServletResponse response) {

    // create a cookie
    Cookie cookie = new Cookie("platform","mobile");

    // expires in 7 days
    cookie.setMaxAge(7 * 24 * 60 * 60);

    // optional properties
    cookie.setSecure(true);
    cookie.setHttpOnly(true);
    cookie.setPath("/");

    // add cookie to response
    response.addCookie(cookie);

    // TODO: add your login logic here
    String jwtToken = "NOT_AVAILABLE";

    // return response entity
    return new ResponseEntity<>(jwtToken, HttpStatus.OK);
}

프로젝트에 적용한 코드는 다른 로직도 들어가있어 복잡하다. 그래서 쿠키방식을 위를 참고하여 구현하였다.

 

 

참고

velog.io/@yaytomato/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%90%EC%84%9C-%EC%95%88%EC%A0%84%ED%95%98%EA%B2%8C-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0

dzone.com/articles/how-to-use-cookies-in-spring-boot

attacomsian.com/blog/set-cookie-with-response-entity-in-spring-boot

jun-itworld.tistory.com/27

 

저작자표시 (새창열림)

'Tech > Spring' 카테고리의 다른 글

Google 소셜 로그인 Google API 클라이언트 라이브러리 + GoogleIdTokenVerifier 사용하는 방법  (5) 2021.03.15
Spring Boot Validation 순서 정하기 & 테스트 코드  (5) 2021.03.15
@Controller와 @RestController의 차이점  (2) 2021.02.12
[취준생을 위한 스프링부트 백엔드 프로그래밍] 3주차 과제  (0) 2021.01.26
[취준생을 위한 스프링부트 백엔드 프로그래밍] 2주차 과제  (0) 2021.01.21
'Tech/Spring' 카테고리의 다른 글
  • Google 소셜 로그인 Google API 클라이언트 라이브러리 + GoogleIdTokenVerifier 사용하는 방법
  • Spring Boot Validation 순서 정하기 & 테스트 코드
  • @Controller와 @RestController의 차이점
  • [취준생을 위한 스프링부트 백엔드 프로그래밍] 3주차 과제
소프
소프
  • 소프
    기회는 찬스
    소프
  • 전체
    오늘
    어제
    • 분류 전체보기 (138) N
      • Language (20)
        • Java (19)
        • Design Pattern (1)
      • Tech (27)
        • Spring (19)
        • JPA (3)
        • QueryDSL (1)
        • Gradle (4)
      • 개발 생각 (1)
      • IT Book (0)
        • 자바_스프링 개발자를 위한 실용주의 프로그래밍 (0)
      • Database (4)
        • Mysql (4)
        • Redis (0)
      • 네트워크 (1)
      • 운영체제 (2)
      • IDE (12)
        • Intellij (9)
        • vscode (2)
        • datagrip (1)
      • 인프라 (11)
        • Docker (2)
        • Jenkins (7)
        • Github Actions (1)
        • GCP (1)
      • 형상관리 (2)
        • gitlab (2)
        • git (0)
      • 외부활동 (44)
        • CS 면접 끝장내기 - 데이터베이스 1기 (5)
        • CS 면접 끝장내기 - 컴퓨터 네트워크 2기 (5)
        • CS 면접 끝장내기 - 자바 2기 (0)
        • TDD, 클린 코드 with Java 17기 (7)
        • ATDD, 클린 코드 with Spring 8기 (6)
        • 루퍼스 2기 (21)
      • 프로젝트 (0)
      • 회고 (6)
      • 기타 (1)
        • 제미니의 개발 실무 (0)
  • 블로그 메뉴

    • 홈
    • Github
    • LinkedIn
    • 방명록
  • 인기 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.6
소프
SpringBoot에서 HttpOnly 쿠키방식을 이용한 refreshToken 발급
상단으로

티스토리툴바