Study/TIL(Today I Learned)

24.01.08 JWT

에린_1 2024. 1. 12. 10:16
728x90

인증과 인가

인증

  • 자격 증명확인
  • 비밀번호, 생체인식, 일회용 핀
  • 사용자가 볼 수 있음
  • 사용자가 부분적으로 직접 변경 가능
  • ID 토큰을 통한 데이터 전송
  • 로그인
  • ex) 놀이공원 입장

인가

  • 권한 허가/거부
  • 보안 팀에서 관리하는 설정 사용
  • 아니오
  • 불가능
  • 액세스 토큰을 사용한 데이터 전송
  • 사용자의 로그인 이후의 활동에 대한 서버의 허가
  • ex) 티켓을 보여주면 놀이기구를 탈 수 있음

JWT(Json Web Token)

  • 서비스에서 유저를 인증하고 식별하기 위한 Token(토큰) 기반 인증 방식
  • 토큰은 세션과 달리 서버가 아닌 클라이언트에 저장된다.
  • 인증에 필요한 정보들을 암호화시킨 Json형식의 토큰

JWT의 구조 & 생성 & 발급

  • Header(헤더)
    • JWT에서 사용할 타입과 알고리즘의 종류
  • Payload(페이로드)
    • 서버에서 첨부한 사용자 권한 정보와 사용자의 데이터
    • key-value의 한 쌍을 Claim 이라고 한다.
  • Signature(서명)
    • Header, Payload를 Encode 한 이후 Header에 명시된 해시함수를 적용하고, 개인키(Private Key)로 서명한 전자서명
    • (헤더 + 페이로드) 와 서버가 갖고 있는 유일한 key 값을 합친 것을 헤더에서 정의한 알고리즘으로 암호화를 한다.

JWT 인증 과정

  • 서버는 JWT를 이용해 토큰의 정보를 아는 게 중요한 것이 아니라 클라이언트가 요청과 함께 보낸 JWT가 유효한 토큰인지 검사하는 것이 중요하다.
  • 클라어인트가 보낸 JWT의 Header, Payload를 서버의 Key값을 이용해 Signature를 만들어 클라이언트가 보낸 Signature와 일치하는지 확인하고 일차하면 인증을 통과시킨다.(인가)
  • 토큰의 진짜 목적은 정보 보호보다는 위조 방지이다.
  • 데이터의 위변조를 방지한다.

JWT 장점

  • JWT는 인증에 필요한 모든 정보를 담고 있기 때문에 인증을 위한 별도의 저장소가 없어도 된다.
  • 세션(Stateful)과 다르게 서버는 무상태(StateLess)가 된다.
  • 확장성이 우수하다.
  • 토큰 기반으로 다른 로그인 시스템에 접근 및 권한 공유가 가능하다.(쿠키와의 차이)
  • OAuth의 경우 소셜 계정을 통해서 다른 웹서비스에 로그인 할 수 있다.
  • 모바일에서도 잘 동작한다.(세션은 모바일x)

Tip

  • 서버에서 가장 피해야 할 것은 DB 조회이다. 서버가 죽는 경우 중 대부분은 DB가 터져서 서버도 같이 죽는 경우이다. 이와 관련해서 JWT는 DB조회가 필요없다는 장점을 가지고 있다.

JWT 단점

  • 토큰을 탈취당한다면 대처가 매우 어렵다.

Access Token & Refresh Token

  • 토큰이 탈취 당했을 때 대처가 매우 어려운 대안으로 Access Token & Refresh Token을 사용한다.
  • JWT는 발급 후 삭제가 안된다. 그래서 Access Token에 유효시간을 부여하는 방식으로 이 문제를 해결한다.

Refresh Token

  • JWT
  • Access Token는 접근에 관련된 토큰이고, Refresh Token은 Access Token을 재발급 할 때 사용하는 토큰이다.(Refresh Token이 Access Token보다 긴 유효기간을 가진다.)인증과 인가

 

728x90