Spring Security (1) - JWT

hyozkim·2020년 1월 20일
1

Spring Security

목록 보기
1/6
post-thumbnail

🎈 다룰 내용

  • Web 서비스 아키텍처
  • Session 기반 사용자 인증
  • Stateless 아키텍처와 JWT(Json Web Token)
  • Spring Security 기반 인증(Authentication) & 인가(Authorization) 처리

Web 서비스 아키텍처

3-Tier 아키텍처

가장 보편적이고 이해하기 쉬운 아키텍처

  • Presentation Layer - 사용자와의 접점 제공, 수평확장이 쉽고 좋다
  • Application Layer - 트랜잭션 처리를 위한 비지니스 로직 제공
  • Data Layer - 데이터를 저장하고 조회하는 기능 제공

장점

  • 각 계층을 모듈화해 다른 계층에 미치는 영향을 최소화
  • 프론트엔드, 백엔드 엔지니어 역할 분리에 따른 업무 효율화
  • 다른 계층에 영향을 최소화 하며 확장이 용이함

Session 기반 사용자 인증

매우 부정적인 사용자 경험을 선사할 가능성이 큼

  • 문제가 발생한 서버의 모든 사용자 인증정보를 유실함
  • 해당 서버에서 인증된 사용자들은 다시 로그인 해야 함
  • 모든 서버들사이에서 Session이 공유되지 않은 경우 문제가 될 수 있음

HTTP 세션이란?

해결방법(Session Cluster)

  • 분산 데이터베이스 사용
  • 특정 서버에 문제가 생겨도 다른 정상적인 서버에서 Session을 가져올 수 있음
  • 서버는 인증된 사용자 정보를 저장하기 위한 용도로 Session을 사용
  • Sticky Connection(동일한 사용자의 요청은 동일한 WAS에서 처리됨을 보장) 제약에서 자유로움

👉 문제점
Session을 저장하기 위한 별도의 데이터베이스가 필요하고, Session Cluster 문제시 대규모 장애 발생 가능성이 있다.

Stateless 아키텍처와 JWT(Json Web Token)

HTTP 근본적으로 무상태(Stateless) 프로토콜

Stateless라는 말은 기본적으로 무상태이다. HTTP 자체는 사용자에 관련된 정보를 저장하지 않고, 정보를 전달하는 목적으로 쓰인다. HTTP 프로토콜을 통해 HTML와 같이 Static Resource 전달 가능하지만 서비스를 stateless로 바꾸는건 현실에서 불가능에 가깝다고 할 수 있다.

Stateless 철학에 충실한 JWT

그래서 HTTP에 Stateless를 유지하며 사용자 정보를 담기 위해 JWT 를 사용한다.

전체 JWT 생성, 인증 흐름
1) 클라이언트가 서버에 인증 요청한다.
2) 서버가 인증이 완료되면 JWT 인증 텍스트파일을 내려준다.
3) 클라이언트는 텍스트파일(로컬 스토리지)을 저장하고 있다가 HTTP Header에 Token값을 담아서 서버에 전송한다.
4) 서버는 Token을 보고 현재 이 요청을 보낸 사용자가 누구인지 인식하게 된다.

필요한 정보들 효과적으로 담고 있음. 위변조 되지 않은 장치가 있음.
JWT 토큰 내용이 위변조 되지 않았다라고 하는 시그니처가 JWT에 담게 된다. (위변조에 대해 어느정도 안전하다) JWT는 복잡한 암호화를 하지 않고 Base64Decode함. Key정보만 잇으면 된다. JWT 토큰에 담고 있는 내용은 10분정도 간다.(refresh Token)

참고

(프로그래머스) 단순 CRUD는 그만! 웹 백엔드 시스템 구현 온라인 스터디(Java반) 강의를 수강하고 제가 이해한대로 정리했습니다. 문제가 될시 삭제하겠습니다!

profile
차근차근 develog

0개의 댓글