diff --git a/daekyeong.md b/daekyeong.md new file mode 100644 index 0000000..5cefc94 --- /dev/null +++ b/daekyeong.md @@ -0,0 +1,42 @@ +## 사용자 관점에서의 로그인 과정 흐름 +- 로그인에 성공하고 실패하는 순간까지의 과정 + - 로그인에 성공 + 1. ID와 PW를 입력하여 MemberController에서 "/login"을 통해 서버에 전달 + 2. MemberSerivce의 login() 메서드 호출 + 3. login() 메서드에서 MemberReqDto와 MemberLoginResDto를 활용하여 회원의 ID, PW 일치여부 확인 + 4. PW는 데이터베이스에 저장되어있는 암호화된 PW와 입력한 PW를 암호화하여 비교, 일치여부 판단 + 5. 정보가 일치할 경우 세션을 생성 및 인증여부를 SecurityContext 객체에 전달 + 6. SecurityContext 객체에 전달된 내용을 세션에 저장 + + - 로그인에 실패 + 1. ID와 PW를 입력하여 MemberController에서 "/login"을 통해 서버에 전달 + 2. MemberSerivce의 login() 메서드 호출 + 3. login() 메서드에서 MemberReqDto와 MemberLoginResDto를 활용하여 회원의 ID, PW 일치여부 확인 + 4. ID가 일치하지 않는 경우 IllegalArgumentException - "회원 정보를 찾을 수 없습니다" 오류 반환 + 5. PW가 일치하지 않는 경우 IllegalStateException - "비밀번호가 일치하지 않습니다" 오류 반환 + +- 로그인 성공 후 사용자에게 제공되는 경험, '로그인 유지'가 어떻게 사용자 관점에서 나타나는지 + - 로그인에 성공하게 되면 사용자는 주어진 권한을 활용해 다양한 리소스에 접근이 가능 + - 새로고침 및 다른 페이지로 이동하여도 로그인이 계속 유지됨 + +## 서버가 로그인한 사용자를 인식하는 방식 +- 로그인한 사용자를 지속적으로 인식하기 위해 쿠키와 세션이 어떻게 사용되는지 + 1. 서버는 사용자가 로그인할 때 세션을 생성하고 쿠키에 담아 전달하는데, 이때 'JSESSIONID' 라는 이름의 쿠키를 생성 + 2. 쿠키에 담긴 세션이 만료되기 전까지 서버가 api를 호출할때마다 세션을 조회하고 사용자의 정보를 확인 + +- 세션 기반 로그인에서의 쿠키의 역할 + 세션 기반 로그인에서는 쿠키가 세션을 담아 보관하는 역할 + 쿠키에 저장된 데이터를 통해 사용자의 로그인 상태를 쉽게 관리 가능 + +- 세션 ID가 쿠키에 저장되어 클라이언트와 서버 간에 전달되는 과정 + 세션은 쿠키에 ID,PW와 같은 인증 정보가 아닌 'JSESSIONID'라는 식별자를 저장 + 클라이언트에 세션이 담긴 쿠키를 저장, 클라이언트에서 서버로 쿠키 전달, 식별자를 통해 사용자의 세션 식별 + +## 세션을 구현할 때 보안적으로 고려해야 할 부분 +1. HttpOnly 설정 + JavaScript를 통한 쿠키 접근 차단, XSS 공격을 완화하여 쿠키나 세션 토큰 등 민감한 정보 탈취 방어 +2. Max-Age 설정 + 쿠키가 만료할때까지의 시간을 설정, 다른 사용자의 쿠키 접근 위험을 방지 +3. Path 설정 + 브라우저가 쿠키를 전송하기 위해 요청된 경로 설정, 해당 경로에만 쿠키를 전송할 수 있어 + 비효율적으로 쿠키가 여러 값을 전달하거나 쿠키 이름이 충돌하는 경우를 방지 \ No newline at end of file