[네트워크] 세션기반 인증방식_토큰기반 인증방식
📌 세션기반인증방식
- HTTP의 특징 중 하나는
stateless
하다.
- 즉, HTTP 요청을 통해 데이터를 주고 받을 때, 요청이 끝나면 요청한 사용자의 정보를 유지하지 않는 특징이 있다.
✅ 세션
✅ 세션ID
- 웹 서버 또는 DB에 저장되는 클라이언트에 대한 유일한 ID
⭐ 세션 기반 로그인 프로세스
✅ 단점
- 사용자의 상태에 관한 데이터를 서버에 저장했을 때 로그인 중인 유저의 수가 늘어난다면 서버의 메모리에 과부하가 일어남
- DB중 RDBMS에 저장한다면 직렬화 및 역직렬화에 관한 오버헤드가 발생
📌 토큰기반인증방식
- state를 모두 토큰 자체만으로 처리하며 토큰을 처리하는 한 서버를 두고 다른 컨텐츠를 제공하는 서버는 모두 stateless하게 만드는 것
- 토큰은 주로 JWT토큰을 활용
- 로그인 시, access token과 refresh token이 발급됨
⭐ JWT(Json Web Token)
- JSON객체로 인코딩되며 메시지 인증, 암호화에 사용됨
- 헤더 : 토큰 유형과 서명 알고리즘, base64URL로 인코딩
- 페이로드 : 데이터, 토큰 발급자, 토큰 유효기간, base64URL로 인코딩
- 시그니처 : (인코딩된 헤더 + 페이로드) + 비밀키를 기반으로 헤더에 명시된 알고리즘으로 다시 생성한 값
✅ 장점
- 사용자 인증에 필요한 모든 정보는 토큰 자체에 포함되기 때문에 별도의 인증 저장소가 필요없다
- 다른 유형의 토큰과 비교했을 때
경량화
되어있음
- 디코딩했을 때 JSON이 나오기 때문에 JSON을 기반으로 쉽게 직렬화, 역직렬화가 가능
✅ 단점
- 토큰이 비대해질 경우 서버과부하에 영향을 줌
- 토큰을 탈취당할 경우 디코딩했을때 데이터를 볼 수 있음
✅ access token
- 수명을 짧게 설정
- 로그인 유지
Bearer
을 앞에 둬서 토큰기반인증방식이라는 것을 알려주어야 함
- HTTPS를 사용
- 쿠키에 저장한다면
sameSite : 'Strict'
- url에 토큰을 전달하면 안됨
✅ refresh token
- 수명을 길게 설정
- access token이 만료되거나 사용자가 새로고침을 한 경우, access token을 재발급 하기위해 사용됨(access token의 단점 보완)