게이트웨이 서버가 하는 일
1. 라우팅: 모든 요청시 jwt를 헤더로 받아서 jwt 분석 후 인증서버 또는 모노서버로 라우팅
1-0: 라우팅시 header에 userid, role을 포함해서 인증서버 또는 모노서버로 보낸다
- jwt 토큰 검증
- 블랙리스트 토큰 체크
블랙리스트를 체크를 먼저하고 토큰 검증을 시작한다
- 토큰 검증
권한 체크
2. redis권한 조회: jwt에 있는 userid, role이 레디스에 있는지 검색
2-0. role이 CUSTOMER면 권한 체크 안한다. 그외 권한은 레디스에서 권한 체크를 한다.
2-1: 레디스에 있으면 요청한 url로 라우팅한다
2-2: 레디스가 없으면 인증서버로 해당 userid의 role 업데이트 요청을 보낸다.
2-2-1: 다시 레디스 조회를 해서 값이 있으면 원래 요청 url로 라우팅한다
2-2-2: 다시 레디스 조회를 해서 값이 없으면 권한이 없다는 에러를 보낸다.
- 로그인 체크
로그인, 회원가입은 게이트웨이에서 인증을 필터 적용 안함
바로 인증서버로 로그인 보냄
3-1. 로그인 시, 게이트웨이가 헤더에서 jwt 파싱함, jwt가 유효하면 인증서버 안옴
3-2. 로그인 시, 게이트웨이가 헤더에서 jwt 파싱함, jwt가 안 유효하면 인증서버에 로그인 요청
- 로그아웃
- 유효한 jwt 요청인지 확인
- 인증서버로 로그아웃 요청한다
게이트웨이 필요한 연결
redis: 값을 받아야하니 Redis 연결 필요
jwt: jwt 검증해야함
게이트웨이 서버 구현
필터로 jwt 검증 (회원가입, 로그인은 안받는다)
인증 서버가 하는 일
jwt 토큰이 없는 상태
- 로그인 요청
- email과 비밀번호가 일치하는지 확인
- 일치하면 토큰을 발행한다
- 토큰을 쿠키에 담는다, 게이트웨이 서버로 보낸다, 게이트웨이 서버는 유저에게 jwt 토큰을 준다
- 회원가입
- 게이트웨이 서버에서 모노리틱서버로 유저를 생성한다,
- 모노리틱 서버에서 인증서버로 redis 요청을 한다.
- 인증서버에서는 모노리틱서버에서 요청한 userId와 role을 추가한다
- jwt 검증: 게이트웨이에서 한다, 인증서버에서는 jwt 검증 안함
- redis(userid, role) 업데이트, 삭제
- 로그아웃
- 레디스에 블랙리스트jwt 을 넣는다
- 세션은 안쓰니 세션 제거는 필요없다
- 클라이언트에서 jwt 토큰 쿠키 삭제
인증 서버 필요한 연결
redis: 값 세팅, 수정
jwt: jwt 생성
인증 서버 구현
컨트롤로 요청을 처리한다
로그인 처리: 쿠키로 jwt응답
회원가입: redis 추가
'Today I Learned' 카테고리의 다른 글
멀티모듈 프로젝트 설정 (0) | 2024.09.12 |
---|---|
쿠팡 프로젝트를 설계하면서.. (0) | 2024.09.05 |
프로젝트 시작 (0) | 2024.08.23 |
API 설계 원칙 (0) | 2024.08.20 |
Redis, Spring (0) | 2024.08.07 |