관리 메뉴

Jerry

인증 #2 (쿠키, 세션, 토큰) 본문

Authentication

인증 #2 (쿠키, 세션, 토큰)

juicyjerry 2021. 5. 10. 21:01
반응형

오늘은 세션에 대해서 알아보겠습니다.

 


 

이전에 쿠키는 브라우저에서 관리한다고 하였다.

세션은 반대로 서버에서 관리한다!

 

세션은 쿠키보다 더 안전하고 많은 데이터를 저장하는 방식입니다.

세션은 서버에서 가지고 있는 정보이며 쿠키는 사용자에게 발급된 세션을 열기 위한 열쇠입니다. 

쿠키만으로 인증한다는 것은 클라이언트가 인증 정보를 책임지는 것이며 HTTP 요청을 탈취당할 경우 보안이 노출됩니다.

(그래서, 장바구니 기능, 자동 로그인 설정 기능 같은 보안과 거리가 있는 것에 사용할 땐 쿠키를 이용합니다)

 

결국, 세션은 인증 역할을 서버측에서 한다는 것을 의미합니다. 서버 해킹이 더 어렵다는 반증이겠죠?

 

 

 


 

 

세션 동작 방식

출처: (좌)https://tansfil.tistory.com/58 (우) https://interconnection.tistory.com/74

 

여기서 주목할 점은, 4번인데요. 세션ID 발급이라는 과정의 의미는 해당 세션 ID를 받아 쿠키에 저장하여 쿠키를 인증 매체로 이용하겠다는 것입니다. 저는 개인적으로 쿠키와 세션을 구분 지어서 생각하고 있었기에 혹시 저처럼 오해하시는 분이 계실까 봐 언급하였습니다.

 

그래서, 한편으로 세션ID를 쿠키라고 보아도 무방하다고 이야기할 수 있습니다. (쿠키 안에 세션 ID)

 

 


 

 

쿠키와 세션의 차이점 (장/단점)

쿠키

  • 쿠키는 보안에 취약하다. 그 이유는 브라우저에서 확인과 수정이 가능하다. 
  • 속도는 세션보다 빠르다.

 

세션

  • 세션은 쿠키보다 보안이 안전하다. 
  • 고유 ID를 발급하여 사용하기에 서버 자원에 접근하기 용이하다.
  • 서버에서 많은 세션을 관리할수록 속도가 저하될 수 있기에 세션 관리 서버를 따로 만들어 관리해야 한다. (이런 이유로 쿠키를 사용하기도 한다)
  • 세션 ID가 든 쿠키를 훔쳐 HTTP 요청을 하면 서버의 세션 저장소에서는 오인해 요청에 대한 응답을 합니다. 
  • 세션 하이재킹 공격이라고 하며, 이에 대한 해결책으로는 요청을 탈취해도 안의 정보를 읽기 힘들게 하거나 세션에 유효 시간을 넣어주는 방법이 있습니다.

* 유효 시간을 설정하는 코드입니다.

app.use(express.cookieParser())
app.use(
  express.session({
    key: "sid", // 세션키
    secret: "secret", // 비밀키
    cookie: {
      maxAge: 1000 * 60 * 60, // 쿠키 유효기간 1시간
    },
  })
)

 

 

참고 - kurien 그를 들어가시면 실생활 예시로 설명한 글을 보실 수 있습니다!

이해가 필요하신 분들은 참고해보세요!

 

 

참고

jungyu.log | velog.io/@enskawk1991/cookie-session

그랩의 블로그 | tansfil.tistory.com/58

berkbach | bit.ly/3eziiG0

kurien | bit.ly/3uz0tME

김정환 블로그 | bit.ly/3biCOZo

반응형

'Authentication' 카테고리의 다른 글

인증 #3 (쿠키, 세션, 토큰)  (2) 2021.05.11
인증 #1 (쿠키, 세션, 토큰)  (1) 2021.05.07