개발 ━━━━━/Spring(boot)

[Spring] 인증 방식 (쿠키-세션, JWT)

GukJang 2023. 8. 30. 23:54
반응형

Bean

Bean 이 적용된 Class 가 여러 개일 경우

@Autowired
Food food;

하면 에러 발생

 

Food chicken;
Food pizza;

1. 객체를 따로 선언해준다.

 

2. @Primary 어노테이션을 붙여준다. (범용적으로 사용되는 객체)

 

3. @Qualifier("pizza") 를 해당 클래스, Food 객체 선언할 때 붙여준다. (Primary 보다 우선순위가 높음, 지역적으로 사용되는 객체)

 

인증 (Authentication) 과 인가 (Authorization)

인증 vs 인가

인증 - 해당 유저가 실제 유저인지 인증하는 개념

인가 - 해당 유저가 특정 리소스에 접근이 가능한지 허가를 확인하는 개념

 

인증 방식

쿠키-세션 방식

서버가 '특정 유저가 로그인되었다'는 상태를 저장하고, 인증과 관련된 최소한의 정보만 저장해서 로그인을 유지시킨다.

 

쿠키 - 클라이언트에 저장될 목적으로 생성한 작은 정보를 담은 파일

쿠키와 세션 모두 HTTP 에 상태 정보를 유지 (Stateful) 하기 위해 사용된다.
쿠키와 세션을 통해 서버에서는 클라이언트 별로 인증 및 인가를 할 수 있다.
쿠키는 공백이 불가하다.

 

JWT (JSON Web Token) 방식

JSON 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token

JWT 토큰 (Access Token) 을 HTTP 헤더에 실어 서버가 클라이언트를 식별한다.

쿠키 저장소를 사용하여 JWT 저장

 

로그인 정보를 Server 에 저장하지 않고, Client 에 로그인 정보를 JWT 로 암호화하여 저장

- 모든 서버에서 동일한 Secret Key 소유

- Secret Key 통한 암호화 / 위조 검증

장점

  1. 동시 접속자가 많을 때 서버 측 부하 낮춤
  2. Client, Server 가 다른 도메인을 사용할 때 (ex. 카카오)

단점

  1. 구현의 복잡도 증가
  2. JWT 에 담는 내용이 커질수록 네트워크 비용 증가 (클라이언트 -> 서버)
  3. 기 생성된 JWT 를 일부만 만료시킬 방법 x
  4. Secret Key 유출 시 JWT 조작 가능
반응형