[WEB] 토큰(Token) QnA

sudog·2023년 10월 1일
0

WEB

목록 보기
5/9

웹에서 토큰이 뭘 의미하는 거야?

토큰이란 사용자 인증 및 권한 부여를 위해 인증된 사용자에게 서버가 발급하는 일련의 암호화된 데이터를 의미합니다. 토큰은 클라이언트 측에 저장되며 인증이나 권한을 요구하는 요청과 함께 전달됩니다.

쿠키-세션 방식 대신 토큰을 사용해 인증하는 이유는?

쿠키-세션 방식을 이용한 인증에서는 서버가 사용자의 상태를 기억해야 했습니다. 따라서 서버의 무상태성을 유지해 분산 환경으로의 확장이 용이하고 서버, 데이터베이스의 부담이 적은 토큰 방식이 인증 및 권한 설정에 적합합니다.

서버는 어떻게 토큰을 이용해서 사용자를 인증하지?

토큰의 종류마다 방식이 다를 수 있어 웹 표준으로 사용되는 JWT(JSON Web Token)을 기준으로 설명드리겠습니다. JWT는 헤더, 페이로드, 서명으로 나누어져 있습니다.

  • Header : 헤더에는 토큰 유형과 서명 알고리즘 정보가 들어 있습니다. 가령, 유형은 JWT, 서명 알고리즘은 HMAC SHA256이 될 수 있습니다.
  • Payload : 토큰의 본문으로, 사용자 식별자 및 권한 정보, 토큰 만료 시간 등을 담고 있습니다. 세션 키와 마찬가지로 민감한 정보는 포함하지 않습니다.
  • Signature : 토큰의 헤더와 페이로드를 서버의 비밀 키로 암호화한 정보입니다.

서버는 전송된 토큰에서 헤더와 페이로드를 추출해 비밀 키로 해싱합니다. 만약 해싱 결과와 서명이 일치하지 않으면 조작되거나 잘못 요청된 토큰으로 판단해서 요청을 거부하게 됩니다.

그럼 서버의 비밀 키가 노출된다면 헤더와 페이로드를 작성해 위조로 서명이 가능하겠네?

그렇습니다. 서버는 어떤 토큰을 발행했는지 기억하지 않습니다. 가령, 인증 서버가 따로 존재해서 토큰을 발행한다면 비밀 키를 공유하는 모든 분산 서버에서 해당 토큰으로 인증이 가능합니다.

profile
안녕하세요

0개의 댓글