반응형
지금까지 만든 시큐리티의 동작을 설명하겠다.
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 Boot 3.1 & Spring Security 6: JWT 검증 리팩토링 (11편)
JWT 필터 스프링 시큐리티 코드 리팩토링을 진행했다. 1. JwtAuthorizationFilter 클래스를 리팩토링 했다. 기존에는 한줄로 이루어져있던 코드를 extract method로 각각 역할별로 추출했다. import com.fasterxml.
curiousjinan.tistory.com
Spring Boot 3.1 & Spring Security 6: 로그인 & 메인 페이지 컨트롤러 (9편)
로그인 뷰를 보여주고 action을 실행시킬 로그인 컨트롤러와 메인페이지를 보여주게될 메인 컨트롤러를 작성한다. 1. @Controller - 로그인, 메인페이지 컨트롤러 1-1. LoginController 이 코드는 사용자의
curiousjinan.tistory.com
반응형
'Spring > 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 |