Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

박세은 5주차 과제 제출 #6

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions seun.md
Original file line number Diff line number Diff line change
@@ -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 적용 : 클라이언트와 서버 간의 통신을 암호화하여 중간자 공격을 방지