diff --git a/seun.md b/seun.md new file mode 100644 index 0000000..af6d7a7 --- /dev/null +++ b/seun.md @@ -0,0 +1,40 @@ +# 24-25-Server-Assignment-05 + +## 사용자 관점에서의 로그인 과정 흐름 + 1. 사용자가 loginId와 password 입력 후 로그인 버튼 클릭 + 2. /api/members/login 경로로 로그인 정보 전달되며 loginReqDTO가 request body에 포함 + 3. Memberserice.login() 메서드가 호출되어 데이터베이스에서 loginId와 일치하는 사용자 조회 + 5. 사용자가 조회되지 않는 경우, IllegalArgumentException 발생 -> "회원 정보를 찾을 수 없습니다." 메시지 + 6. 비밀번호가 일치하지 않는 경우, IllegalArgumentException 발생 -> "비밀번호가 일치하지 않습니다." 메시지 + 7. 비밀번호가 일치하는 경우, MemberLoginResDto 객체 반환 + 8. HttpServletRequest를 통해 세션을 생성하거나 기존 세션을 가져와 로그인한 사용자 정보를 SecurityContext에 인증 정보 설정 후 세션에 저장 + 9. 세션에 SPRING_SECURITY_CONTEXT를 저장 서버가 로그인 사용자를 지속적으로 인식 가능 + 10. 세션 덕분에 페이지를 새로 고침하거나 다른 요청이 들어와도 세션이 유지되어 다시 로그인할 필요없이 인증 상태 유지 + + +## 서버가 사용자를 인식하는 방식 +### 로그인한 사용자를 서버가 지속적으로 인식하기 위해 쿠키와 세션이 어떻게 사용되는지 설명 + - 세션 : 서버에서 사용자의 정보를 유지하는 방식. 사용자가 서버는 로그인할 때 고유한 세션 ID를 생성하여 해당 사용자 관련 정보를 저장 + - 쿠키 : 서버가 사용자의 웹 브라우저(클라이언트)에 저장하는 데이터. 서버는 클라이언트에게 세션 ID를 쿠키에 담아서 전달. + 클라이언트는 쿠키를 사용해 서버에 다시 접속할 때마다 세션 ID를 포함하여 서버에 인증 요청. + 1. 사용자가 로그인 요청 + 2. 사용자가 로그인하면 서버는 새로운 세션 생성하고 이를 식별할 고유한 세션 ID를 생성하여 세션과 연결 + 4. 서버는 세션 ID를 클라이언트의 쿠키에 담아 전달 + 5. 요청이 들어올 때마다 서버는 쿠키에 담긴 세션 ID를 읽어 세션 저장소에서 세션을 조회하여 사용자를 식별 + 7. 세션이 존재하면 서버는 사용자가 로그인한 상태임을 인식하고 요청에 맞는 권한 및 인증을 수행 + 8. 세션 만료 시간이 지나거나 로그아웃하면 세션이 삭제되고 클라이언트가 쿠키를 통해 세션 ID를 보내도 서버는 세션을 찾지 못함 + +### 쿠키가 세션 기반 로그인에서 어떤 역할을 하는지 구체적으로 서술하고, 특히 세션 ID가 쿠키에 저장되어 클라이언트와 서버 간에 전달되는 과정에 대해 설명 + - 쿠키는 세션 기반 로그인에서 클라이언트와 서버 간에 인증 정보를 전달하는 역할 + - 세션 기반 로그인에서 사용자의 로그인 상태를 유지하기 위해 서버는 사용자의 세션 ID를 클라이언트에 쿠키로 저장 + 1. 사용자가 로그인하면 서버는 사용자를 위한 세션을 생성하고 고유한 세션 ID 할당 + 2. 서버는 세션 ID를 쿠키에 담아 클라이언트에 전달하고 브라우저는 전달받은 쿠키를 로컬에 저장 + 5. 이후에 사용자가 동일한 서버에 다시 요청 할 때마다 브라우저가 자동으로 세션 ID가 담긴 쿠키를 서버에 전송 + 6. 서버는 요청 시 전달된 쿠키의 세션 ID를 세션 저장소에서 조회하여 사용자 인식 + + +## 세션을 구현할 때 보안적으로 고려해야할 부분 + 1. 세션 타임아웃 설정 : 일정 시간이 지나면 자동으로 세션 만료 + 2. 세션 고정 방지 : 로그인할 때마다 세션 ID를 발급하여 세션을 탈취하지 못하도록 함 + 3. CSRF 방지 : 사용자가 의도하지 않은 요청을 서버에 보내는 공격 방지 + 4. HTTPS 적용 : 클라이언트와 서버 간의 통신을 암호화하여 중간자 공격을 방지