[Spring] 쿠키를 사용한 로그인 구현

우잼·2023년 9월 16일
1
post-thumbnail

1. 쿠키(Cookie)


  • 사용자가 웹사이트 접속시 사용자의 개인 장치에 다운로드되고 브라우저에 저장되는 작은 텍스트 파일
  • 해당 사이트에 접속할 때마다 지속해서 해당하는 쿠키를 보내주고 이 쿠키를 이용하여 웹 사이트는 사용자의 장치를 인식하고 일부 데이터를 저장

2. 구현


2-1. 개념

  • 쿠키를 사용하여 로그인 기능 구현
  • 로그인 성공시 서버는 쿠키에 사용자 정보를 담아 브라우저에 전달, 브라우저는 해당 쿠키 저장
  • 서버에서 이 쿠키를 확인해 로그인 했는지와 유저 정보, 권한 등을 확인할 수 있음

2-2. 쿠키 생성

  • jakarta.servlet.http에 Cookie라는 클래스 사용
  • 쿠키 생성 시 key, value 쌍으로 값을 넣어줄 수 있음

    Cookie cookie = new Cookie("key", "value")

  • 유효 시간을 설정할 수 있음

    cookie.setMaxAge(60 * 60); // 유효 시간 : 1시간

  • 설정이 끝난 쿠키를 서버 응답 객체(HttpServletResponse)에 addCookie 메소드를 이용해 쿠키를 전송

    response.addCookie(cookie);

2-3. 쿠키 확인

  • @CookieValue 어노테이션을 사용하면 쿠기 value를 받아 올 수 있음.

    @CookieValue(name="user")

  • HttpServletRequest는 특정 이름의 Cookie를 구하는 메소드가 없기 때문에 getCookies 메소드와 반복문을 사용하여 원하는 이름의 Cookie를 얻을 수 있다.
	Cookie[] cookies = request.getCookies();
  		for (Cookie checkCookie : cookies) {
        # "user"는 찾고자하는 쿠키의 key
        	if (checkCookie.getName().equals("user")) {
            	...
                ...
            }
            }

2-4. 쿠키 파기

  • 쿠키를 파기하는 방법은 생성했던 쿠키와 똑같은 Key 값을 넣어주고 Value를 null로 설정하여 생성
	Cookie cookie = new Cookie("user", null);
  • 해당 쿠키의 setMaxAge(0)을 통해 유효 시간을 0초로 설정
	cookie.setMaxAge(0);
  • 해당 쿠키를 다시 HttpServletResponse 의 addCookie를 통해 쿠키를 파기할 수 있음
	response.addCookie(cookie);

3. 문제점


  • 쿠키 값을 임의대로 변경할 수 있음
  • 쿠키에 보관된 정보를 타인이 훔쳐갈 수 있음
  • 한 번 도용된 쿠키 정보는 계속 악용될 수 있음

    위변조 및 도용이 쉽다는 문제가 있다. 이런 문제점을 해결하기 위해서 중요 정보들은 클라이언트가 아닌 서버에서 관리하고 그게 외부로 노출되지 않도록 해야한다.
    클라이언트는 서버가 보관하고있는 중요 정보에 접근할 수 있는 key만 가지고 있고, 이 key 또한 유효시간을 짧게 둬서 갱신되도록 한다면 보안적으로 보다 안전해 질 것이다. 이러한 방식으로 정보를 보관 및 연결 유지하는 것을 세션 이라고 한다!

4. Reference


[Spring Boot] Cookie를 사용한 로그인 구현
로그인 처리 1- 쿠키, 세션

profile
나는 재민

0개의 댓글