인증(session, token)

han·2021년 12월 12일
0

Overview

인증(Authentication)과 인가(Authorization)에 대한 내용
인증은 로그인이고 인가는 사용자가 요청을 보냈을 때 이 사용자가 로그인 되어있는지, 권한은 있는지 등을 확인하는 것을 말한다.

세션

  1. 로그인 시 서버에서 세션을 발급한다.
  2. 서버는 세션의 일부를 클라이언트에 전송한다.
  3. 세션은 브라우저의 쿠키에 저장된다(session id).
  4. 이후 요청마다 http header에 session id가 포함된다.
  5. 서버에서 http request header의 세션일부와 자신이 가지고있는 세션일부를 가지고 짝이 맞는지 확인한다.
    문제점: 서버에서 세션을 관리하기 까다롭다.
    메모리, 하드, 디비 등에 정보를 가지고 있어야하지만 메모리의 경우 서버가 재시작되는 경우 혹은 에러가 발생한 경우 모든 사용자가 로그인이 튕길 수 있으며 하드 및 데이터베이스에 저장 시 퍼포먼스에 이슈가 있다.

토큰

  1. JWT(Json Web Token)라 부름
  2. 로그인 시 서버는 token을 발급하여 클라이언트에 전송하고 클라이언트는 이를 쿠키에 저장해두었다가 http request마다 토큰을 header에 담아 전송하게 된다.
  3. 토큰의 구조는 아래와 같다.

    header, payload, verify signature를 base64로 인코딩한 값이 .으로 구분이 되어있다.
    header에는 타입과 알고리즘 종류, payload는 사용자정보 및 토큰의 유효기간, 권한 등이 담겨있으며 verify signature 는 header, payload 그리고 서버내 키값을 header에 있는 알고리즘으로 암호화 한 결과값이다.
    서버는 토큰을 받았을 때, header와 payload값을 가지고 verify signature를 생성하여 보내온 토큰과 동일한지를 확인한다.
    문제점: 토큰을 탈취당하였을 경우 방법이 없음(XSS공격 등)

reference

https://jwt.io/
https://noirstar.tistory.com/266
https://jins-dev.tistory.com/entry/Session-%EA%B8%B0%EB%B0%98-%EC%9D%B8%EC%A6%9D%EA%B3%BC-Token-%EA%B8%B0%EB%B0%98-%EC%9D%B8%EC%A6%9D
https://www.youtube.com/watch?v=1QiOXWEbqYQ&t=387

0개의 댓글