로그인 -- 토큰기반인증방식(access토큰, refresh 토큰)

carlkim·2023년 11월 6일
0

CS학습 - 네트워크

목록 보기
32/48

토큰 기반 인증 방식

state를 토큰에 몰아넣고
서버는 statless 하게 가자.

토큰에 유저의 상태값이 다 들어있다.
토큰으로 유저가 유효한지 유효하지 않은지 판단한다.

토큰 로그인 방식 순서

  1. 유저의 인증 요청(로그인)
  2. 인증성공
  3. Authorization Server가 토큰을 발급
  4. 토큰을 기반으로 사용자가 요청을 할 때, 헤더나 쿠키에 담는다
  5. 인증이 필요한 서버에 요청해 원하는 컨텐츠를 가져온다.

JWT란?
JWT JSON WEB TOKEN 을 의미
헤더, 페이로드, 서명으로 이루어져 있으며 JSON객체로 인코딩되며 메세지 인증, 암호화에 사용된다.

Header
-- 토큰 유형과 서명 알고리즘, base64URL로 인코딩 된다

Payload
-- 데터, 토큰 발급자, 토큰 유효기간, base64URL로 인코딩 된다.

Signature
-- 인코딩된 header + payload + 비밀키를 기반으로 헤더에 명시된 알고리즘으로 다시 생성한 서명값

jwt 토큰 인증 장점

  1. 사용자 인증에 필요한 모든 정보는 토큰에 포함되어있기 때문에 별도의 저장소가 필요없다.
  2. 다른 유형의 토큰과 비교했을 때 경량화되어있다
    SAML(Security Assertion Markup Language Tokens)란 토큰보다도 더 경량화
  3. 디코딩 했을 때 JSON이 나오기 때문에 JSON을 기반으로 쉽게 직렬화, 역직렬화가 가능하다.

단점

  1. 토큰이 비대해질 경우 당연히 서버 과부화에 영향을 줄 수 있다
  2. 토큰을 탈취 당했을 경우 디코딩했을 때 데이터를 볼 수 있다
    [이게 제일 신경써야할 부분.]

토큰기반 인증 방식 (Access 토큰, refresh 토큰)

토큰기반인증방식을 구현할 때는 refresh 토큰과 access토큰 두 개를 기반으로 구현
access 토큰의 수명은 짧게, refresh 토큰의 수명은 길게 한다.

refresh 토큰은 access 토큰이 만료되었을 때 다시 access 토큰을 얻기 위해 사용되는 토큰.
access 토큰이 만료됬을 때마다 인증에 관한 비용이 줄어들게 된다.
로그인을 하게 되면 access 토큰과 refresh 토큰 두 개를 얻습니다.

access 토큰이 만료가 되거나 사용자가 새로고침을 할 때 refresh 토큰을 기반으로 새로운 access token을 얻는다.

  1. 해커가 access 토큰을 탈취!
  2. 내가 아닌데도 이놈이 나쁜짓을 할 수 있다.
  3. 때문에 access Token 만료기간을 짧게 해서 탈취를 하더라도
  4. 시간 내에 쓰지 못하면 못써먹게 해줘야한다
  5. refresh 토큰으 사용하면 로그인을 자주해줘야 하는 불편함을 없앴을 수 있다.
  6. refresh 토큰으로 엑세스토큰을 발급받는다.
profile
가장 나답게 문제해결.

0개의 댓글