개발일지

토큰(Token) 기반 인증 본문

CS, WEB

토큰(Token) 기반 인증

lyjin 2022. 11. 20.

토큰 (Token)

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

 

 

토큰 기반 인증 방식

  • 사용자가 로그인을 요청하면 서버에서는 어떠한 데이터를 기반으로 인증 가능한 토큰을 생성해 클라이언트에 전달한다. 클라이언트는 요청 시 토큰과 함께 요청하고 서버는 토큰에 대한 유효성을 검사하여 사용자의 인증 여부를 판별한다.
  • 토큰 방식은 토큰의 유효성 검증과 유저의 인증을 별도로 분리할 수도 있다. 예를 들어 구글 로그인을 하면 구글 유저 인증 서버에 접근할 수 있는 토큰을 발급해준다. 이 토큰을 다시 구글 유저 인증 서버로 보내 사용자를 인증할 수 있다.
  • jwt는 토큰 유효성을 확인하기 위한 별도의 서버를 거치지 않고도 jwt 토큰 자체를 해석하여 유저를 검증할 수 있도록 한다.
 

동작 방식

  1. 사용자가 아이디와 비밀번호로 로그인을 한다.
  2. 서버 측에서는 해당 계정 정보를 검증한다.
  3. 검증된 계정이면 signed 토큰을 발급해둔다. 여기서 signed란 "해당 토큰이 서버에서 정상적으로 발급된 토큰임을 증명하는 signature를 지니고 있다" 는 의미이다.
  4. 클라이언트는 토큰을 저장하고 있다가 서버에 요청할 때마다 해당 토큰을 함께 전송한다.
  5. 서버는 토큰을 검증하고 요청에 응답한다.

 

토큰의 장점

무상태(stateless)와 확장성(scalability)

토큰은 클라이언트 사이드에 저장하기 때문에 stateless 하며 서버를 확장하기에 용이하다. 만약 세션을 사용하고 있고 서버를 분산했다면 사용자가 로그인 했었던 그 서버로만 요청을 보내도록 설정해야한다. 그러나 토큰은 어떤 서버로든 요청 가능하다.

 

보안성

쿠키를 사용했을 때 발생하는 취약점들이 사라진다.

 

확장성 (Extensibility)

여기서의 확장성이란 로그인 정보가 사용되는 분야를 확장하는 것을 의미한다. 토큰을 사용하여 다른 서비스에서도 권한을 공유할 수 있다. 예를 들어 로켓펀치에서 페이스북, 깃헙, 구글 계정으로도 로그인 가능하다. 또한, 토큰에 선택적인 권한만을 부여하여 발급할 수 있다. 로켓펀치에서 구글 로그인을 했다면 프로필 정보를 가져올 수는 있어도 포스트를 작성할 수 있는 권한은 없다.

 

여러 플랫폼 및 도메인

토큰을 사용하면 그 어떤 디바이스와 도메인이더라도 토큰만 유효하다면 요청이 정상적으로 처리된다.

 

웹 표준 기반

토큰 기반 인증 시스템의 구현체인 JWT는 웹 표준 RFC 7519에 등록되어 있다. 따라서 여러 환경이 지원되며 수많은 회사의 인프라스트럭처에서 사용되고 있다.

'CS, WEB' 카테고리의 다른 글

로드밸런싱이란?  (0) 2024.02.07
OAuth 2.0 알아보기  (0) 2022.12.12
PASETO (Platform-Agnostic SEcurity TOkens)  (0) 2022.11.25
JWT(Json Web Token)  (0) 2022.11.20
쿠키(Cookie)와 세션(Session)  (0) 2022.11.20