개발일지
토큰(Token) 기반 인증 본문
토큰 (Token)
인증을 위해 사용되는 암호화 된 문자열
토큰 기반 인증 방식
- 사용자가 로그인을 요청하면 서버에서는 어떠한 데이터를 기반으로 인증 가능한 토큰을 생성해 클라이언트에 전달한다. 클라이언트는 요청 시 토큰과 함께 요청하고 서버는 토큰에 대한 유효성을 검사하여 사용자의 인증 여부를 판별한다.
- 토큰 방식은 토큰의 유효성 검증과 유저의 인증을 별도로 분리할 수도 있다. 예를 들어 구글 로그인을 하면 구글 유저 인증 서버에 접근할 수 있는 토큰을 발급해준다. 이 토큰을 다시 구글 유저 인증 서버로 보내 사용자를 인증할 수 있다.
- jwt는 토큰 유효성을 확인하기 위한 별도의 서버를 거치지 않고도 jwt 토큰 자체를 해석하여 유저를 검증할 수 있도록 한다.
동작 방식
- 사용자가 아이디와 비밀번호로 로그인을 한다.
- 서버 측에서는 해당 계정 정보를 검증한다.
- 검증된 계정이면 signed 토큰을 발급해둔다. 여기서 signed란 "해당 토큰이 서버에서 정상적으로 발급된 토큰임을 증명하는 signature를 지니고 있다" 는 의미이다.
- 클라이언트는 토큰을 저장하고 있다가 서버에 요청할 때마다 해당 토큰을 함께 전송한다.
- 서버는 토큰을 검증하고 요청에 응답한다.
토큰의 장점
무상태(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 |