반응형
지금까지 만든 시큐리티의 동작을 설명하겠다.
1. 로그인 과정
- 로그인 페이지 접근:
- 사용자는 웹 브라우저에서 로그인 페이지(/login)에 접근한다.
- 로그인 페이지에는 사용자 이름과 비밀번호를 입력할 수 있는 폼이 있다.
- 로그인 요청:
- 사용자가 자신의 사용자 이름과 비밀번호를 입력하고 "Login" 버튼을 클릭하면, AJAX 요청을 통해 서버에 로그인 요청(/user/login)이 전송된다.
- 사용자가 자신의 사용자 이름과 비밀번호를 입력하고 "Login" 버튼을 클릭하면, AJAX 요청을 통해 서버에 로그인 요청(/user/login)이 전송된다.
- 인증 필터 처리:
- CustomAuthenticationFilter는 로그인 요청을 가로챈다. 이 필터는 UsernamePasswordAuthenticationFilter를 확장하여 구현되었다.
- 요청에서 사용자 이름과 비밀번호를 추출하여 UsernamePasswordAuthenticationToken 객체를 생성한다. 이 토큰은 인증을 시도하기 위한 초기 토큰이다.
- CustomAuthenticationFilter는 로그인 요청을 가로챈다. 이 필터는 UsernamePasswordAuthenticationFilter를 확장하여 구현되었다.
- 인증 관리자 처리:
- AuthenticationManager는 UsernamePasswordAuthenticationToken을 사용하여 사용자를 인증한다.
- 인증에 성공하면, 인증된 사용자의 정보와 권한을 포함하는 새로운 Authentication 객체가 반환된다.
- AuthenticationManager는 UsernamePasswordAuthenticationToken을 사용하여 사용자를 인증한다.
- JWT 생성:
- 인증에 성공하면, 사용자의 정보를 기반으로 JWT 토큰이 생성된다. 이 토큰은 사용자의 세션 정보를 안전하게 저장하고 전송하는 데 사용된다.
- JWT는 헤더, 클레임 및 서명의 세 부분으로 구성된다. 클레임에는 사용자의 정보(예: 사용자 이름)가 포함된다.
- 인증에 성공하면, 사용자의 정보를 기반으로 JWT 토큰이 생성된다. 이 토큰은 사용자의 세션 정보를 안전하게 저장하고 전송하는 데 사용된다.
- 응답 반환:
- JWT 토큰은 응답의 쿠키 또는 헤더에 포함되어 클라이언트에 반환된다.
- 클라이언트는 이 토큰을 저장하고 이후의 모든 요청에 포함시켜 서버에 전송한다.
2. 로그인 후 jwt 토큰을 가진채로 다른 페이지로 이동할 시 동작
- 요청 전송:
- 사용자가 다른 페이지로 이동하려고 할 때, 웹 브라우저는 해당 페이지의 URL에 대한 요청을 서버에 전송한다.
- 이 요청에는 이전 단계에서 받은 JWT 토큰이 포함된다.
- JWT 인증 필터:
- JwtAuthorizationFilter는 요청을 가로챈다.
- 필터는 요청에서 JWT 토큰을 추출하고, 토큰의 유효성을 검사한다.
- 토큰이 유효하면, 토큰에서 사용자의 정보를 추출하고, 해당 사용자의 권한과 함께 새로운 Authentication 객체를 생성한다.
- SecurityContext 업데이트:
- Authentication 객체는 SecurityContext에 저장된다. 이렇게 하면 애플리케이션의 다른 부분에서 현재 인증된 사용자의 정보와 권한을 액세스할 수 있다.
- Authentication 객체는 SecurityContext에 저장된다. 이렇게 하면 애플리케이션의 다른 부분에서 현재 인증된 사용자의 정보와 권한을 액세스할 수 있다.
- 페이지 접근:
- 사용자는 요청한 페이지에 접근한다. 페이지에는 로그아웃 버튼이 있을 수 있으며, 이 버튼을 클릭하면 로그아웃 요청이 서버에 전송된다.
- 사용자는 요청한 페이지에 접근한다. 페이지에는 로그아웃 버튼이 있을 수 있으며, 이 버튼을 클릭하면 로그아웃 요청이 서버에 전송된다.
이 구현에서는 사용자가 로그인을 시도할 때 초기 인증을 위한 UsernamePasswordAuthenticationToken을 사용한다. 인증에 성공하면 JWT 토큰이 생성되어 클라이언트에 반환되며, 클라이언트는 이 토큰을 사용하여 이후의 요청을 인증한다. JWT 토큰은 사용자의 세션 정보를 안전하게 저장하고 전송하는 데 사용되며, 서버는 이 토큰을 사용하여 사용자의 인증 상태를 확인한다.
반응형
'Spring Security' 카테고리의 다른 글
Spring Boot 3.1 & Spring Security 6: JWT 검증 리팩토링 (11편) (2) | 2023.09.04 |
---|---|
Spring Security 6 이해하기: 동작 원리와 보안 기능 탐구 (0) | 2023.09.04 |
Spring Boot 3.1 & Spring Security 6: 로그인 & 메인 페이지 컨트롤러 (9편) (0) | 2023.08.08 |
Spring Boot 3 & Security 6 시리즈: UserDetailsService, DTO 작성하기 (8편) (0) | 2023.08.07 |
Spring Boot 3 & Security 6 시리즈: JWT Util 클래스 작성 (7편) (0) | 2023.08.07 |