토큰(token)

선유준·2023년 3월 8일
0

CS

목록 보기
5/7

🪙 토큰이란?

서버가 클라이언트를 누군지 정확히 구별 가능하도록 유니크한 정보를 담은 암호화 데이터이며, 최근 웹 애플리케이션에서 많이 사용되는 인증 방식 중 하나이다.

토큰 기반 인증은 기존의 세션 기반 인증의 한계를 극복하기위해 사용하며, 유저의 인증 상태를 클라이언트에 저장할 수 있어서, 세션 인증 방식의 비교해 서버의 메모리 부족 문제를 줄일 수 있다.

토큰 인증 방식 흐름

  1. 사용자가 인증 정보를 담아 서버에 로그인 요청을 보낸다.
  1. 서버는 데이터베이스에 저장된 사용자의 인증 정보를 확인하여 토큰을 만든다.
  1. 생성된 토큰을 클라이언트로 전달한다.
    • HTTP 상에서 인증 토큰을 보내기 위해서는 Authorization 헤더를 사용하거나, 쿠키로 전달하는 등의 방법을 사용합니다.
  1. 사용자는 토큰과 함께 서버에 요청을 보낸다.
  1. 서버는 자신이 만든 토큰이 맞는지 비밀키를 통해 검증하며, 토큰이 맞는 경우에만 올바른 응답을 보내준다.

토큰 인증 방식의 특징

  • 권한 부여에 용이 : 토큰은 인증 상태, 접근 권한 등 다양한 정보를 담을 수 있기 때문에 사용자 권한 부여에 용이
  • 무상태성 : 서버는 비밀 키를 통해 클라이언트에서 보낸 토큰의 유효성만 검증하면 되기 때문에 유저의 인증 상태를 관리하지 않는다.
    등..

사용자에 대한 정보를 암호화해서 브라우저에 저장하여 웹페이지 접속시, 저장된 정보로 사용자마다 다른 화면을 보여주는 용도로 사용할 수 있다.

🔑 JWT (JSON Web Token)

JSON 객체에 정보를 담고 이를 토큰으로 암호화하여 전송할 수 있는 기술이며 토큰 기반 인증 구현 시 대표적으로 사용하는 기술이다.

JWT의 구성

위와같이 HEADER, PAYLOAD, SIGNATURE로 구성되어있다.

1. HEADER
Header에는 HTTP의 헤더처럼 해당 토큰 자체를 설명하는 데이터가 담겨 있다.
2. Payload
Payload는 HTTP의 페이로드와 마찬가지로 전달하려는 내용물을 담고 있는 부분이다.
3. Signature
Signature는 토큰의 무결성을 확인할 수 있는 부분이며, 서버의 비밀 키(암호화에 추가할 salt)와 Header에서 지정한 알고리즘을 사용하여 Hashing한다.

해싱 (Hashing)
가장 많이 쓰이는 암호화 방식중에 하나이며 해시 함수(Hash Function)을 사용하여 암호화를 진행한다.

  • 항상 같은 길이의 문자열을 리턴한다.
  • 서로 다른 문자열에 동일한 해시 함수를 사용하면 반드시 다른 결과값이 나온다.
  • 동일한 문자열에 동일한 해시 함수를 사용하면 항상 같은 결과값이 나온다.

Hashing의 목적은 데이터 그 자체를 사용하는 것이 아니라, 동일한 값의 데이터를 사용하고 있는지 여부만 확인하는 것이다.

액세스 토큰(Access Token)과 리프레시 토큰(Refresh Token)

  • Access Token
    액세스 토큰은 서버에 접근하기 위한 토큰으로 보안을 위해 보통 24시간 정도의 짧은 유효기간이 설정되어 있다.

  • Refresh Token
    리프레시 토큰은 서버 접근을 위한 토큰이 아닌 액세스 토큰이 만료되었을 때 새로운 액세스 토큰을 발급받기 위해 사용되는 토큰이다.

액세스 토큰이 만료되어도 리프레시 토큰의 유효기간이 남았다면, 사용자는 다시 로그인을 할 필요 없이 지속해서 인증 상태를 유지할 수 있다.

profile
매일매일 발전하는 개발자를 목표로!

0개의 댓글