생각해 보자 님의 블로그

권한 인증?(Authorization)? Token과 Session을 알아 보자 본문

테크 지식

권한 인증?(Authorization)? Token과 Session을 알아 보자

woohyuntak 2024. 12. 20. 20:48

권한 인증이란?

권한 인증(Authorization)은 웹 애플리케이션에서 특정 리소스나 기능에 접근할 수 있는 사용자를 결정하는 중요한 시스템입니다. 대부분의 사이트에서는 로그인을 통해 사용자를 인증하고, 인증된 사용자만 특정 기능을 사용할 수 있게 제한합니다. 이 과정을 바로 권한 인증이라고 하죠.

왜 중요한가?

권한 인증은 웹 애플리케이션을 안전하게 보호하는 데 필수적인 요소입니다. 제대로 된 인증이 없으면, 사용자가 본인 외의 다른 사람의 정보를 열람하거나 시스템에서 중요한 작업을 수행할 수 있게 되죠. 예를 들어, 쇼핑몰에서는 자신만의 주문 내역을 수정할 수 있어야 하고, 은행에서는 자신의 계좌 정보에만 접근할 수 있어야 합니다. 바로 이런 중요한 데이터를 지키는 게 권한 인증입니다.

방법은 뭐가 있을까?

권한 인증을 구현하는 방법에는 주로 Token 방식Session 방식이 있습니다. 이 두 가지 방식은 서로 다르고, 각각 장단점이 있기 때문에, 어떤 방식이 더 적합한지에 따라 선택이 달라질 수 있습니다.

Token 방식 (JWT)

Token 방식은 사용자가 로그인하면 서버에서 토큰을 발급받고, 이 토큰을 통해 사용자의 인증을 처리하는 방식입니다.

  • 로그인 후 서버는 토큰을 생성하고, 이 토큰은 사용자 정보를 포함한 payload를 가지고 있습니다. 이 토큰은 클라이언트에서 저장되며, 이후 서버로 요청할 때마다 Authorization 헤더쿠키에 담아 전송합니다.
  • JWT처럼 토큰은 서명된 시크릿 키를 통해 서버에서 토큰의 무결성을 확인할 수 있습니다.
  • 토큰stateless한 특성을 가지기 때문에, 서버는 별도로 세션을 관리하지 않아도 되며, 여러 서버 간에 쉽게 공유할 수 있다는 장점이 있습니다.
  • 다만, 토큰이 탈취될 경우 악용될 수 있기 때문에 Access TokenRefresh Token을 구분해 관리하는 방식이 일반적입니다.

Session 방식

Session 방식은 서버에서 세션 정보를 관리하는 방식입니다.

  • 사용자가 로그인하면 서버는 세션 ID를 생성하여 클라이언트에게 전달합니다. 이 세션 ID는 주로 쿠키에 저장되며, 이후 클라이언트가 서버에 요청할 때마다 세션 ID를 함께 전송합니다.
  • 서버는 세션 테이블에서 해당 세션 ID가 유효한지 확인하고, 사용자의 권한을 체크합니다.
  • 세션 방식은 서버에서 세션을 관리하기 때문에, 보안성이 상대적으로 높고 세션 ID가 유출되지 않으면 안전하게 인증을 유지할 수 있습니다.

차이점과 장/단점

Token 방식Session 방식은 각각 장단점이 있습니다.

Token 방식의 장점

  • 서버에 상태를 저장하지 않아도 되므로 확장성이 뛰어나고, 여러 서버 간에 인증 정보를 쉽게 공유할 수 있습니다.
  • JWT는 주로 SPA(Single Page Application)나 모바일 앱과 같은 분산 시스템에서 유용하게 사용됩니다.

Token 방식의 단점

  • 토큰이 탈취되면 악용될 수 있기 때문에, 이를 방지하려면 Access Token의 유효 기간을 짧게 설정하고, Refresh Token을 안전하게 관리하는 것이 중요합니다.
  • JWT암호화되지 않은 정보도 담길 수 있어 민감한 데이터를 포함하는 데 주의해야 합니다.

Session 방식의 장점

  • 서버에서 세션 정보를 관리하므로, 세션 ID만 있으면 인증을 쉽게 처리할 수 있습니다. 이로 인해 상대적으로 보안이 강화될 수 있습니다.
  • 세션 방식서버 중심의 관리가 가능하여 로그인 유지와 같은 기능을 쉽게 구현할 수 있습니다.

Session 방식의 단점

  • 서버에서 세션을 관리해야 하므로 서버에 부담이 커질 수 있습니다. 특히 대규모 애플리케이션에서 서버의 성능에 영향을 줄 수 있습니다.
  • 세션이 유실되면 문제가 될 수 있기 때문에, 세션 복구세션 클러스터링 등을 고려해야 합니다.

대표적인 사용 사례

Token 방식은 주로 마이크로서비스분산 시스템, 그리고 모바일 애플리케이션에서 많이 사용됩니다. 예를 들어, OAuth2를 사용하는 시스템에서 JWT를 활용하여 인증을 처리합니다.

반면, Session 방식금융 서비스보안이 중요한 서비스에서 많이 사용됩니다. 예를 들어, 온라인 뱅킹 시스템에서는 세션 ID를 사용하여 사용자의 권한을 확인하고, 세션 타임아웃을 설정하여 보안을 강화합니다.