JWT - 토큰기반인증 #1 장점과 작동원리



토큰기반인증은 요즘 가장 핫한 인증개념이라고 할 수 있다.

어떤 장점이 있는지 알아보자.

장점


Stateless 서버

자주 사용하고 많이들 알고 있을 세션-쿠키의 Stateful 서버방식과 다르게 토큰 방식은 Stateless로써 상태를 지니고 있을 필요가 없다.

즉, 서버는 클라이언트의 request에만 의존하여 서비스를 제공하면 되고 잘못된 상태를 저장할 위험이나 그로인한 오류에서 벗어날 수 있다.

조금 더 자세히 이야기해 보자.

HTTP 프로토콜은 상태를 보관할 수 없기 때문에 상태를 보관하기 위해 세션과 쿠키를 사용한다. 서버에서 세션에 상태를 보관하고, 브라우저에서는 쿠키를 놓는다.

쿠키는 브라우저의 메모리에 보관하고(디스크에 저장한게 아니라 브라우저가 꺼지면 지워진다.)

이 때 세션과 쿠키의 상태를 비교하며 클라이언트와 서버가 인터액션하게 되는데, 문제가 몇가지 생긴다.

사실 그 문제들은 Stateful 서버의 문제라고 할 수 있고, 토큰기반인증의 장점은 거의 Stateless서버의 장점이라고 할 수 있다.

CSRF(Cross-Site Request Forgery,XSRF)

사이트간 요청 위조. 예를들어 이미 쿠키가 사용자 정보를 가지고 있기때문에 사용자가 사이트를 벗어나도 공격자에게 노출될 수 있다. 공격자가 비밀번호 수정 URL로 유도하여 멋대로 비밀번호를 바꾸어버린다면 쿠키가 있기 때문에 서버는 신뢰하고 작업을 진행하는 것이다. 토큰 기반인증에서는 헤더 내에 토큰이 포함되어 CSRF를 방지할 수 있다.

CORS(Cross-Origin Resource Sharing)

쿠키는 단일 도메인 및 서브 도메인에서만 작동하도록 설계되어 있기 때문에 여러 도메인에서 관리하기 어렵다. 하지만 토큰기반인증은 토큰만 유효하다면 어디서든 작동할 수 있다.

서버 확장

프로젝트가 커져서 서버가 여러대 생겼다고 했을 때 서버1에 세션이 저장되어 서버2에 간 호출은 unauthorized가 날 수 있다. sticky세션(같은 서버에 세션을 계속 연결시키는 방식)을 사용하여 해결할 수 있지만, 이런걸 고려하지 않아도 토큰 기반방식은 자연스럽게 해결된다.

다른 어플리케이션과의 인터액션

OAuth에 대해서 들어보았다면 다른 앱에서도 페이스북 등등의 서비스를 통해 로그인하는 방법에 대해서도 알것이다. 페이스북이 토큰기반인증방식을 사용하기 때문에 다른 서비스에서도 접근 할 수 있는것이다.

작동원리


  1. 클라이언트가 로그인 요청을 한다.

  2. 서버에서 로그인 정보를 검증한다.

  3. 검증이 완료되면 서버는 클라이언트에게 signed토큰을 발급한다.

  4. 클라이언트는 토큰을 저장해두고 서버에 요청할 때마다 토큰을 함께 전달한다.

  5. 서버는 토큰을 검증하고 응답한다.






© 2019. by Moonan

Powered by Moonan