본문 바로가기

스터디/Spring Boot

[Spring Boot] 스프링 스터디 5일차

인증 vs 인가

 

인증(Authentication): 증명서를 발급받음, 증명서를 다룸. /api/v1

ex) 로그인

인증 요청 문제, 401 Error(Unauththorized)

 

인가(Authorization): 서버입장에서 자원에 접근하는 것을 허락하는 것, 자원을 다룸. /api/v2

=> 인증 완료된 자격이 필요함. 로그인 필수!!!

접근 권한 문제, 403 Error(Forbidden)

 

 

※ 세션 vs JWT

 

세션: 서버가 유저 상태를 추적(Stateful). 서버가 아닌 메모리에서 로그인한 유저의 정보를 직접 저장함.

서버가 세션id를 클라이언트에 전달함.

 

JWT: 메모리에서 관리하지 않음(Stateless). 토큰 사용.

서버가 토큰을 클라이언트에 전달함.

Token: header, payload, signature(보안/유효성 검사. 토큰 유효 여부 판별(서버가 자신이 발급한 토큰이 맞는지 확인) 후, 로그인 가능 여부 판별)

 

 

토큰

  Access Token(자원 서버 접근 가능) Refresh Token
수명주기 30분 7일
권한 인가 인증
저장 위치 1. js 변수 2. 브라우저 session(Client측에서 처리)
3. 쿠키(Server측에서 처리)

 

-> XSS공격(Client측), CSRF 공격(Server측)

 

Refresh Token 탈취 보안

1. RTR: RT을 통해 AT을 재발급 받을 때, RT도 함께 재발급 받고 기존의 RT은 무효화함. 발급한 RT을 메모리에 저장하여 관리함.

2. MEM관리: Hash의 key:value를 userId:RT{id}로 관리. AT이 유효하지 않은 경우 RT안에 있는 userId정보를 확인하여, 메모리에서 userId:RT{id}가 일치한지 확인.