세션 기반 인증 방식
- 세션 기반 인증을 위해 Session 과 Cookie 가 사용됩니다.
- 다음 Flow로 인증 절차가 진행됩니다.
- 유저가 로그인을 하고 세션이 서버 메모리 상에 저장됩니다. 이 때 세션을 식별하기 위한 Session Id를 기준으로 정보를 저장합니다.
- 브라우저에 쿠키로 Session Id가 저장됩니다.
- 쿠키에 정보가 담겨있기 때문에 브라우저는 해당 사이트에 대한 모든 Request마다 HTTP Cookie Header에 Session Id를 담아 전송합니다.
- 서버는 클라이언트가 보낸 Session Id와 서버 메모리로 관리하고 있는 Session Id를 비교하여 Verification을 수행합니다.
세션 기반 인증 방식 장단점
- 장점
- 세션 기반 인증 방식은 구현이 상당히 명확하다는 장점이 있습니다. 또한 실제 서버에서 로그인 상태 확인이 굉장히 유용합니다.
- 상대적으로 안전합니다. 서버 측에서 관리하기 때문에 클라이언트 변조에 영향받거나 데이터의 Stale(손상) 우려가 없습니다.
- 단점
- 서버에서 관리하기 때문에, 세션 저장소를 따로 이용하기에 요청이 많아지면 많아질수록 서버 부하가 심해집니다.
- 멀티 디바이스 환경에서 로그인 시 신경써줘야 할 부분들이 생깁니다.
토큰 기반 인증 방식
- Token 기반 인증의 방법으로 많은 웹 서버들은 JWT(JSON Web Token)를 사용합니다.
- Token 기반 인증 방식과 Session 기반 인증 방식의 가장 큰 차이점은 유저의 정보가 서버에 저장되지 않는다는 점입니다.
- 다음 Flow 로 인증 절차가 진행됩니다.
- 세션 기반 인증 방식은 유저가 로그인을 하고 서버에 세션을 이용해서 인증 정보를 기록하는 대신, 토큰 기반 인증 방식은 Token 을 발급합니다.
- 클라이언트는 발급된 Token 을 저장합니다. (일반적으로 local storage 에 저장합니다.)
- 클라이언트는 요청 시 저장된 Token 을 Authorization Header 에 포함시켜 보냅니다.
- 서버는 매 요청 시 클라이언트로부터 전달받은 헤더의 Token 정보를 Verification 한 뒤, 해당 유저에 권한을 인가합니다.
토큰 기반 인증 방식 장단점
- 장점
- 클라이언트에 저장되기 때문에 서버의 메모리에 부담이 되지 않으며 Scale에 있어 대비책을 고려할 필요가 없습니다.
- 멀티 디바이스 환경에 대한 부담이 없습니다.
- 단점
- 이미 발급된 JWT를 돌이킬 수 없습니다.
- 세션 기반 인증 방식처럼 저장소를 사용하는 경우에는 해당 세션이 악의적으로 사용될 경우 지워버리면 되지만, JWT는 한 번 발급되면 유효기간이 만료될 때까지는 계속 사용이 가능합니다.
- JWT의 길이가 길어지면 많은 네트워크 트래픽의 사용으로 네트워크 부하가 발생합니다.
※ 요약 ※
- 세션 기반 인증(Session-Based Authentication)
- 세션 기반 인증은 서버 측에서 사용자 상태를 유지하고 관리하는 방식입니다. 일반적으로 웹 애플리케이션에서 사용됩니다.
- 사용자가 로그인하면 서버는 사용자에 대한 세션을 생성하고 고유한 세션 ID를 할당합니다. 이 세션 ID는 서버 측에 저장되거나 데이터베이스에 저장됩니다.
- 사용자가 애플리케이션에서 요청을 보낼 때마다 세션 ID를 함께 전송하며, 서버는 세션 ID를 사용하여 사용자를 식별하고 해당 세션에서 사용자 상태를 유지합니다.
- 로그아웃하거나 세션이 만료되면 사용자는 다시 로그인해야 합니다.
- 토큰 기반 인증(Token-Based Authentication)
- 토큰 기반 인증은 세션 기반 인증과 달리 상태를 서버에 저장하지 않고 클라이언트 측에서 상태를 관리합니다.
- 사용자가 로그인하면 서버는 사용자에게 액세스 토큰과 종종 리프레시 토큰을 발급합니다. 액세스 토큰은 사용자를 인증하는데 사용되며, 리프레시 토큰은 새로운 액세스 토큰을 발급받기 위해 사용됩니다.
- 클라이언트는 액세스 토큰을 각 요청의 헤더 또는 요청 매개변수로 전달하여 서버에 요청합니다. 서버는 이 토큰을 검증하고 사용자를 인증합니다.
- 토큰은 클라이언트 측에서 저장되므로 서버의 상태를 유지할 필요가 없습니다. 이로써 서버의 확장성이 향상됩니다.
반응형
'개발자 기술 면접 > 기타 질문' 카테고리의 다른 글
[기타] TCP/IP란? (0) | 2024.03.07 |
---|---|
[기타] 모놀리식, 마이크로서비스 아키텍처 (0) | 2023.12.30 |
[기타] OAuth 2.0이란? (0) | 2023.12.30 |
[기타] 가상머신(VM)과 컨테이너의 차이 (0) | 2023.12.30 |
[기타] 옵저버 패턴 (2) | 2023.12.30 |