티스토리 뷰

👉 들어가며 .

이번 글은 로그인 방식으로 Session 방식과 token 방식의 장단점을 정리한 글이다.

서비스 로그인 기능을 구현하면서  Session과 token  중 어느 방식으로 구현 할 지에 고민했던 적이 있었다.

고민했던 내용을 정리하는 게시글이다.

 

Session.

Session은 웹 사이트의 여러 페이지에 걸쳐 사용되는 사용자 정보를 저장하는 방법을 말한다.

사용자가 브라우저를 닫아 서버와의 연결을 끝내는 시점까지를 세션이라고 한다.

서버에서 사용자의 인증정보를 관리한다.

 

session으로 인증하는 과정

세션을 사용해도 결국 클라이언트와 서버는 쿠키로 연결된다. 단, 중요한 차이는 중요한 정보를 클라이언트가 아닌 서버에서 관리한다는 것이다.

  설명
장점 - 서버에서 직접 사용자 인증 정보를 관리하기 때문에 보안성이 좋다.
- 브라우저가 유지 되는 동안 세션시간을 서버에서 설정 할 수 있다.
단점 - 클라이언트가 요청할 때마다 서버에서 세션 정보를 확인해야 하기 때문에, 서버의 부하가 증가 시킨다.
- 서버의 메모리나 데이터베이스에 세션 정보를 저장하기 때문에, 확장성이 떨어질 수 있습니다.

Token.

token 방식을 JWT를 이용해 인증 정보를 저장하고 관리한다.

JWT는 Json Web Token의 약자로 당사자 간에 정보를 Json 개체로 안전하게 전송한다.

JWT는 크게 3가지로 나뉜다.

  • Header ( 일반적으로 토큰 유형(JWT)과 사용 중인 서명 알고리즘(예: HMAC SHA256 또는 RSA)의 두 부분으로 구성된다)
  • Paylod (JWT를 사용하는 사람들이 마음대로 정의할 수 있다.)
  • Signature (사용에 동의한 당사자 간에 정보를 공유하기 위해 생성된 사용자 정의 클레임이며 등록 또는 공개 클레임이 아니다.)

형식으로  xxxxx.yyyyy.zzzzzz  형식으로 이루어서 보내진다.

 

사용방식은 사용자가 보호된 경로 또는 리소스에 액세스하려고 할 때마다 사용자 에이전트는 일반적으로 Bearer 스키마 를 사용하여 Authorization 헤더 에서 JWT를 보내서 사용한다.

Authorization: Bearer <token>

형식으로 API 주소를 요청 할 때 header에 Authorization 명칭트로 토큰을 보내 주어야 한다.

 

헤더에 토큰이 전송되면 Authorization는 쿠키가 아니므로 CORS 문제가 발생하지 않는다.

Token으로 인증하는 과정

1. 애플리케이션 또는 클라이언트가 권한 부여 서버에 대한 권한 부여를 요청한다.

2. 권한이 부여되면 권한 서버는 애플리케이션에 엑세스 토큰을 반환한다.

3. 애플리케이션은 엑세스 토큰을 사용하여 보호된 리소스에 엑세스 합니다.

 

  설명
장점 - 데이터의 위변조를 방지한다.
- jwt는 인증에 필요한 모든 정보를 담고 있기 때문에 인증을 위한 별동의 저장소가 없어도 된다.
- 세션과 다르게 서버는 무사태(StateLess)가 된다.
- 확장성이 우수하다.
- 토큰 기반으로 다른 로그인 시스템에 접근 및 권한 공유가 가능하다.(쿠키와의 차이)
- OAuth의 경우 소셜 계정을 통해서 다른 웹서비스에 로그인 할 수 있다.
- 모바일에서도 잘 동작이 가능하다.
단점 - 쿠키/세션과 다르게 토큰의 길이가 길어, 인증 요청이 많아질수록 네트워크 부하가 심해진다.
- Payload 자체는 암호화가 되지 않아 중요한 정보는 담을 수 없다.
- 토큰을 탈취당한다면 대처가 매우 어렵다.

 

마무리.

session과 token에 관해 정리하면서 고민을 해결 할 수 있었다.

요즘 다양한 디바이스로 서비스를 하기 때문에 확장성이 좋은 Token 방식을 많이 사용하는것으로 생각된다.

프로젝트를 진행하면서 현업에서는 Access Token, Refresh Token을 이용하여 토큰방식의 단점을 해결한 다는것을 알게되었다.

다음에는 더 깊이 파봐야겠다.

 


참고 자료

https://jwt.io/introduction

 

JWT.IO

JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

jwt.io

http://www.tcpschool.com/php/php_cookieSession_session

'CS & Network' 카테고리의 다른 글

[Network] 트래픽  (0) 2023.08.08
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함