[질문] 인증/인가 API 관련 #34
-
@jungyuminn API 구현하시느라 고생 많으셨습니다! 몇 가지 질문 사항과 요청 사항이 있습니다.
너무 추상적이라서 Front 단에서 해당 swagger 문서를 보고만 작업을 진행하기 어려워보입니다. 특히, role에는 어떤것이 존재하는지 (enum으로 관리되어도 좋을 것 같습니다.)
비밀번호를 잊은 상태는 로그인을 진행하지 못하는 상황일 것 같은데, JWT 토큰이 필요한 이유에 대해서 궁금합니다.
예를 들어, 최초 가입 상태에서 어떤 API를 호출하고, 어떤 service의 어떤 table에 어떤 데이터가 저장되는지 간단하게라도 시나리오 기반의 설명이 있으면 좋을 것 같습니다.
AS-IS package club.gach_dong;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class GachDongApplication {
public static void main(String[] args) {
SpringApplication.run(GachDongApplication.class, args);
}
} TO-BE package club.gach_dong;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class AuthApplication {
public static void main(String[] args) {
SpringApplication.run(GachDongApplication.class, args);
}
} 로 수정해주시면 좋을 것 같습니다.
Auth-service 와 User-service에 대한 차이점을 구분하려면, 각각의 이름을 수정하여 분리하는 것이 좋아보입니다. |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 2 replies
-
비밀번호 재설정은 로그인이 필수적이라고 생각하여 JWT 토큰이 필요하다고 생각합니다. 하지만, 저도 비밀번호 찾기(재발급)에서 JWT 토큰의 필요성은 적절하지 않은 것 같습니다. 그래서 비밀번호 찾기(재발급)에서 이메일만 받으려고 생각했으나, 악의적으로 타 사용자의 이메일을 입력하여 마음대로 비밀번호 재설정을 할 수 있다는 점입니다.
이에 대하여 좋은 의견 있으면 부탁드립니다.
|
Beta Was this translation helpful? Give feedback.
-
1. 인증 코드 발송 시나리오사용자는 회원가입을 위해 이메일 인증 코드를 요청합니다. API 호출: POST /auth/send_verification_code 사용자가 이메일 주소를 입력하면, 인증 코드 발송 요청을 보냅니다. 이때 AuthController의 sendVerificationCode 메서드가 호출되어, userService.sendVerificationCode(email)를 통해 해당 이메일로 인증 코드가 발송됩니다. 사용자는 이메일을 확인하고, 인증 코드를 입력할 준비를 합니다. 2. 회원가입 시나리오인증 코드를 받은 후, 사용자는 회원가입을 진행합니다. API 호출: POST /auth/register 사용자가 입력한 정보를 바탕으로 회원가입 요청을 보냅니다. completeRegistration 메서드가 호출되어, 먼저 userService.verifyCode를 통해 입력한 인증 코드가 유효한지 확인합니다. 인증 코드가 확인되면, userService.completeRegistration을 통해 사용자 정보가 데이터베이스에 저장됩니다. 회원가입이 성공적으로 완료되면, auth 테이블의 사용자의 정보가 저장됩니다. 3. 사용자 로그인 시나리오회원가입에 성공한 사용자는 로그인을 합니다. API 호출: POST /auth/login 사용자는 이메일과 비밀번호를 입력하여 로그인 요청을 보냅니다. AuthController의 login 메서드가 호출되어, userService.findByEmail로 사용자를 검색합니다. 비밀번호가 올바른지 확인하고, 사용자가 활성화 상태인지 검사한 후, JWT 토큰이 생성되어 사용자에게 전달됩니다. 이제 사용자는 인증된 상태로 애플리케이션을 이용할 수 있습니다. 4. 비밀번호 재발급 시나리오사용자는 비밀번호를 잊어버린 경우, 비밀번호 재발급을 요청할 수 있습니다. API 호출: POST /auth/reset_password 비밀번호 재발급 요청 시, 사용자는 JWT 토큰을 포함하여 요청을 보냅니다. AuthController의 resetPassword 메서드가 호출되어, 토큰의 유효성을 검증한 후, 이메일 주소를 추출합니다. 이후 userService.resetPassword(email)를 통해 임시 비밀번호가 발송됩니다. auth 테이블에 password 필드가 임시 비밀번호로 업데이트되며, 사용자는 이메일을 통해 임시 비밀번호를 받아 사용할 준비를 합니다. 5. 비밀번호 변경 시나리오사용자는 현재 비밀번호를 입력하여 비밀번호를 변경합니다. API 호출: POST /auth/change_password 6. 로그아웃 시나리오사용자는 로그아웃을 합니다. API 호출: POST /auth/logout 로그아웃 요청 시, 사용자는 JWT 토큰을 포함하여 요청합니다. logout 메서드가 호출되어, 해당 토큰을 남은 기간만큼 블랙리스트에 추가하여 로그아웃 처리가 이루어집니다. 사용자는 로그아웃이 완료되었다는 메시지를 확인합니다. 7. 회원 탈퇴 시나리오마지막으로, 사용자는 회원탈퇴를 하여 계정을 삭제합니다. API 호출: POST /auth/unregister 회원 탈퇴 요청 시, 사용자는 JWT 토큰을 포함하여 요청합니다. deleteAccount 메서드가 호출되어, 토큰의 유효성을 검증한 후 이메일 주소를 추출합니다. 이후 userService.deleteUser(email)를 통해 사용자의 데이터가 auth 테이블에서 완전히 삭제됩니다. |
Beta Was this translation helpful? Give feedback.
@EeeasyCode
role을 enum형식으로 수정했습니다. 또한, AuthApiSpecification.java의 description에 회원가입 필드에 대한 설명을 추가하였습니다.
비밀번호 찾기(재발급)/재설정은 다음과 같은 흐름으로 설계되었습니다.
비밀번호 재설정은 로그인이 필수적이라고 생각하여 JWT 토큰이 필요하다고 생각합니다.
하지만, 저도 비밀번호 찾기(재발급)에서 JWT 토큰의 필요성은 적절하지 않은 것 같습니다.
그래서 비밀번호 찾기(재발급)에서 이메일만 받으려고 생각했으나, 악의적으로 타 사용자의 이메일을 입력하여 마음대로 비밀번호 재설정을 할 수 있다는 점입니다.
이에 대하여 좋은 의견 있으면 부탁드립니다.
아래에 이어서 모든 API에 대한 시나리오를 작성하겠습니다.
수정 완료하였습니다.
추후에 빠르게 Auth로 통일하겠습니다. 로컬에서 처음 구현할 때 User라고 생각하고 구현해서 발생한 문제입니다.