JWT를 이용한 인증 서비스 개인 프로젝트
MSA 아키텍처(📁auth-server 📁eureka-server 📁front-server 📁gateway 📁user-server)
Monolithic 아키텍처(📁 src)
🟥 MSA 인증 서버 실행 영상
https://youtu.be/ARxAACi77Lw
📘기록 일지
https://desert-echidna-283.notion.site/Auth-Service-b3dd5d28044541e6a8e520f7d1f1abaa
🟧 Backend
- Java 11
- Spring Boot 2.6.14
- MySQL
- Spring Data JPA
- Redis
- Junit5
- H2
- Spring Cloud 2021.0.0
- Eureka
- Spring Cloud Gateway
🟨 Frontend
- HTML
- CSS
- JavaScript
- JQuery
- BootStrap
- Thymeleaf
eureka-server : 인스턴스들의 정보를 가지고 있는 서버
gateway : 라우팅, 토큰 검증
user-server : 사용자와 관련된 다양한 서비스(회원가입, 유저 관리 등)
auth-server : 로그인 및 토큰 생성
front-server : view
- 가입, 로그인
- 로그인에 성공하면 JWT 발급
- Access Token, Refresh Token은 Cookie에 저장
- 로그인에 성공하면 JWT 발급
- 유저 관리 페이지
- 관리자 권한을 가진 사람만 인가
- NOT_PERMITTED가 아닌 회원들만 조회(USER, ADMIN, MANAGER)
- 인증 서버 API
- 세션 대신에 JWT로 판단하도록 CustomFilter 생성
- CustomFilter는 UsernamePasswordAuthenticationFilter 앞단에 위치
- 세션 대신에 JWT로 판단하도록 CustomFilter 생성
- RDBMS 사용(MySQL)
- Password Encryption
- 랜덤 값 salt를 추가해서 해쉬 함수 생성
- salt는 회원 테이블과 1:1 매핑으로 SALT 테이블에 저장
- BCrypt 사용
- 비밀번호 찾기
- 새로운 비밀번호를 설정할 수 있는 링크를 담아 이메일을 전송
- 캐시
- Refresh Token 저장
- 이메일 인증, 비밀번호 찾기 메일 URL 파라미터 key를 저장
- 해당 URL은 임의의 시간 동안만 유효함
- 이메일 인증
- 로그인 시 NOT_PERMITTED 유저라면 이메일 인증 페이지로 이동
Method | URI | 설명 |
---|---|---|
POST | /auth-server/auth/# | 로그인 |
POST | /user-server/auth/# | 회원 가입 |
POST | /user-server/auth/verify | 인증 메일 전송 |
POST | /user-server/auth/verify/{key} | 인증 메일 검증 |
PUT | /user-server/auth/password | 비밀번호 변경 |
POST | /user-server/auth/password/{key} | 새 비밀번호 설정 URL 검증 |
POST | /user-server/auth/password | 새 비밀번호 설정 메일 발송 |
GET | /user-server/user/email/{username} | 사용자가 가입한 이메일 찾기 |
PUT | /user-server/user/info | 개인 정보 수정 |
POST | /user-server/user/remove | 탈퇴 |
GET | /user-server/admin/manage | 사용자 관리(조회) |