세션과 JWT

김민섭·2022년 12월 15일
0
post-thumbnail

세션은 유저의 정보를 서버측에 저장한다

세션의 과정
1. 회원가입이 되어있는 "striker" 라는 유저가 id와 비밀번호를 서버에 보낸다
2. 비밀번호가 일치한다면 서버는 세션 DB에 "striker"라는 유저를 생성한고 세션ID를 쿠키에 담아서 브라우저에게 보낸다
3. 다음 요청시에 브라우저는 요청과 함께 쿠키를 서버에 보낸다
4. 서버는 들어오는 세션ID와 함께 들어오는 쿠키를 확인 (아직 서버는 유저가 누구인지를 모른다)
5. 서버는 해당 세션ID를 가지고 세션 DB를 확인할 것이고 일치하는 "striker"라는 유저의 세션ID임을 확인한다
6. 새로운 요청이 있을때마다 해당 프로세스를 반복한다

포인트
1. 중요한 유저 정보는 모두 서버에 있다는 것
2. 브라우저가 가지고 있는 것은 세션ID 단 한개
3. 요청이 있을때마다 DB를 생성하고 확인해야 한다
4. 유저가 늘어날수록 서버 DB의 부담이 늘어난다

세션의 장점과 단점

장점
1. 유저의 정보가 서버측에 저장되기 때문에 보안적으로 우세하다
2. 세션DB에 모든 인증 정보가 저장되어 있기 때문에 여러가지 부가기능이 가능하다

단점
동시 접속자가 늘어날수록 서버의 부담이 증가한다

부가기능
넷플릭스나 인스타 처럼 계정 공유 숫자 제한이나 계정 강제 로그아웃 기능을 사용할 수 있다

JWT는 유저의 정보를 클라이언트에 저장한다

JWT는 인증에 필요한 정보들을 암호화시킨 JSON 형식의 토큰이다

토큰이란 인증을 위해 사용되는 암호화된 문자열

JWT의 과정
1. 사용자가 인증에 성공하면 서버는 토큰을 생성, 클라이언트로 보낸다
2. 사용자는 요청 시 토큰을 서버로 보내게 된다
3. 서버는 받은 토큰이 유효한지만 확인한다

jwt의 구조

JWT는 .을 기준으로 3가지 부분으로 나뉘어진다

  1. 헤더 (Header)
  2. 페이로드 (Payload)
  3. 시그니처 (Signature)

헤더 (Header)
암호화 알고리즘과 토큰의 유형이 들어있다

{
  "alg": "HS256",
  "typ": "JWT"
}
  • alg: 서명 암호화 알고리즘 (암호화에 사용되는 알고리즘이다)
  • typ: 토큰의 유형

페이로드 (Payload)
토큰에서 사용할 정보들이 담겨져 있다

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}
  • sub: 토큰 제목
  • name: 유저의 정보
  • iat: 토큰이 발급된 시간 (이 값을 이용하여 토큰의 age가 얼마나 되었는지 판단)

시그니처 (Signature)
JWT는 시그니처로 자신이 발급한 토큰이 맞는지 확인한다

  1. (헤더 + 페이로드)와 서버에서 정의한 SecretKey 값을 합친다
  2. 합친 값을 헤더에서 정의한 알고리즘으로 암호화 한다
  3. 2번의 값으로 자신이 발급한 토큰이 맞는지 확인한다

포인트
1. 토큰은 유저의 정보를 클라이언트에 저장한다
2. 세션 인증에 비해서 서버의 효율이 좋다
3. 토큰이 유효한지만 확인한다

JWT의 장점과 단점

장점
1. 인증을 위한 별도의 저장소가 필요 없음
2. 빠른 인증처리
3. 별도의 서버가 필요 없기에 확장성이 좋음

단점
토큰의 길이가 늘어날수록 네트워크의 부하가 심해짐
특정 토큰을 강제로 만료시키기 어려움

주의할 점
jwt는 암호화 되지 않은 정보라는 것
누구나 열어서 해당 컨텐츠를 볼 수 있다
즉, 개인정보를 토큰에 담으면 절대 절대 절대 안된다!!!!

profile
getting ready to run

0개의 댓글