Servlet Filter 서블릿 기반 애플리케이션에서 애플리케이션의 endpoint에 request가 도달하기 전에, 중간에서 request를 가로챈 후 어떠한 처리를 할 수 있는 포인트 자바에서 제공하는 API. javax.servlet 패키지에 인터페이스로 정의되어 있음 ex) 사용자의 웹 요청이 Controller 같은 endpoint에 도달하기 전에 인증 관리자나 인가 관리자 등의 컴포넌트가 중간에서 요청을 가로채 사용자의 credential과 authorization 등을 검사 Servlet Filter(서블릿 필터)는 하나 이상의 필터들을 연결해 Filter Chain을 구성할 수 있다. 각각의 필터는 doFilter() 메소드를 반드시 가지고 있어야 하고, doFilter() 메소드를 통해..
OAuth2란? Open Standard for Authorization 인터넷 사용자들이 로그인 자격증명(ID/Password 등)을 전송하지 않고도 다른 웹사이트에 있는 자신의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있도록 하는 것 특정 애플리케이션(Client)에서 사용자의 인증을 직접 처리하는 것이 아닌, 사용자 정보를 보유하고 있는 신뢰할 만한 third-party application(Google, Github 등)에서 사용자의 인증을 대신 처리해주고 resource에 대한 자격 증명용 토큰을 발급한 후, Client가 해당 토큰을 이용해 third-part application의 서비스를 사용하게 해주는 방식 예를 들자면, 일정 관리 애플리케이션을 만들기 위해 Googl..
JWT(JSON Web Token) - 데이터를 안전/간결하게 전송하기 위해 고안된 인터넷 표준 인증 방식 - 유저를 인증하고 식별하기 위한 토큰 기반 인증 방식 - JSON 형태의 토큰 정보를 인코딩 후, 인코딩된 토큰 정보를 Secret Key로 Sign한 메시지를 Web Token으로 만들어 인증과정에 사용 JWT의 종류 1. Access Token - 보호된 정보들에 접근할 수 있는 권한을 부여할 때 사용 ➡️로그인 시 Access/Refresh Token 두 가지 다 받지만, 실제로 권한을 얻을 때 사용되는 토큰은 Access Token 2. Refresh Token - 새로운 Access Token을 발급할 때 사용 ➡️일반적으로 DB에 유저 정보와 함께 기록 JWT 구조 Header - 토큰..
Spring Security Filter Chain에 사용자의 로그인 인증 request가 도착해서 인증을 얻고난 뒤, 사용자가 애플리케이션에서 제공하는 리소스를 사용하기 위해서는 하나의 과정이 더 필요하다. 인증이 정상적으로 처리된 것이 확인되었다면 리소스에 대한 접근 권한을 부여해야 한다. 1. AuthorizationFilter는 SecurityContextHolder로부터 Authentication을 획득한다. 2. 획득한 Authentication과 HttpServletRequest를 AuthorizationManager에게 전달한다. 3. RequestMatcherDelegationAuthorizationManager 내부에서 매치되는 AuthorizationManager 구현 클래스가 있다면..
사용자가 로그인 인증을 요청했을 때 spring security에서 해당 요청을 어떻게 처리하는지 도식화한 이미지이다. 일반적으로 ID/Password(spring security에서는 username/password)를 이용해서 로그인하기 때문에 위의 이미지도 ID/Password를 이용한 로그인 인증을 처리하는 상황이다. 1. 가장 먼저 사용자가 로그인 폼(form)을 통해 spring security가 적용된 애플리케이션으로 Id(username)와 password를 포함한 request를 전송한다. 사용자의 요청이 [spring security filter] 영역으로 들어오면 가장 먼저 UsernamePasswordAuthenticationFilter가 요청을 전달받는다. (Filter가 요청을 ..
1. 사용자가 리소스를 요청한다. 2. 인증 관리자 역할의 컴포넌트가 사용자의 credential(password)을 요청한다. 3. 사용자는 인증 관리자에게 credential을 제공한다. 4. 인증 관리자는 credential 저장소에서 사용자의 credential을 조회한다. 인증 관리자는 사용자의 credential과 저장소의 credential을 비교하여 검증 작업을 수행한다. 5. 유효하지 않은 credential이라면 exception을 throw하고, 유효하다면 접근결정 관리자 역할의 컴포넌트는 사용자가 적절한 권한을 부여받았는지 검증한다. 6. 적절한 권한을 받지 못했다면 exception을 throw하고, 적절한 권한을 부여받았다면 보호된 리소스에 사용자가 접근하는 것을 허용한다.