[ 목차 ]
1. 회의 안건
- https : 비올레 제안 - https 인증 기간이 걸릴 수도 있으니 알아봐달라는 제안
- nginx : 소니 제안 - 어떻게 할 것인지
2. 회의 내용
- 얀주가 https를 하려면 nginx 쓰는게 레퍼런스도 많아서 참고하기 편할 듯하다
- 아마 nginx를 쓰게될것 같긴한데요 ?
- 아마 없이 사용할 수 있으면 https 우선으로!
- 마이페이지 우선순위는 로그아웃, 회원 탈퇴
- 수정은 미루자 - 거의 안한다 마인드
- 프론트는 금요일까지 피쳐 작성하고 주말에 테스트
참고
1. 로그인
- Spring Security를 사용하지 않고 직접 인증/인가 기능을 구현했습니다.
- 인증 (Authentication)
- WAS에 들어오는 요청을 검증하기 위한 AuthorizationInterceptor 구현했습니다.
- Http 헤더에 들어있는 엑세스 토큰(JWT) 존재 여부 확인합니다.
- 올바른 엑세스 토큰인지 검증합니다.
- 인가 (Authorization)
- 컨트롤러에 접근하기 전에 요청한 유저의 권한을 검증하기 위한 CurrentUserArgumentResolver 구현했습니다.
- Http 헤더에 들어있는 엑세스 토큰으로 유저 객체를 생성합니다.
- 유저 객체가 알맞은 권한을 갖고 있는지 검증합니다.
- OAuth 로그인 구현
- 클라이언트에서 OAuth 공급자와 인가 코드(AuthorizationCode)가 요청으로 오면 공급자에 알맞는 소셜 로그인 서버(Authorization Server)에게 엑세스 토큰을 요청합니다.
- 전달 받은 엑세스 토큰으로 소셜 로그인 서버(Resource Server)에게 유저 정보를 요청합니다.
- 전달 받은 유저 정보에서 필요한 정보를 Redis에 저장한 뒤 엑세스 토큰과 리프레쉬 토큰을 생성합니다.
- 생성한 엑세스 토큰과 리프레쉬 토큰을 클라이언트에게 반환합니다.
- 리프레쉬 토큰을 활용한 자동 로그인 구현
- 사용자가 로그인을 하면 엑세스 토큰과 리프레쉬 토큰을 발급합니다.
- 엑세스 토큰이 만료되면 리프레쉬 토큰을 사용해 엑세스 토큰을 다시 발급합니다.
- 리프레쉬 토큰의 만료기간이 24시간 미만으로 남았을 때, 기기 고유번호가 일치할 경우 리프레쉬 토큰을 다시 발급합니다.
- 엑세스 토큰, 리프레쉬 토큰 취약점 개선
- 엑세스 토큰이 탈취될 수 있는 문제
- 엑세스 토큰의 만료 시간을 3분으로 설정하여 개선했습니다.
- 리프레쉬 토큰 탈취될 수 있는 문제
- 로그인 시 기기 고유번호를 받아 Redis에 저장합니다.
- 리프레쉬 토큰으로 새로운 엑세스 토큰을 발급할 때 기기 고유번호도 받아 Redis에 저장된 값과 다르면 다시 로그인하도록 하여 개선했습니다.