분류 전체보기 1341

OAuth2 로그인 구현 - Spring MVC 인증 객체 참조하기

Authentication public void dashboard(Authentication authentication) {} oauth2Login() 로 인증을 받게 되면 Authentication 은 OAuth2AuthenticationToken 타입의 객체로 바인딩된다 principal 에는 OAuth2User 타입 혹은 OidcUser 타입의 구현체가 저장된다. DefaultOAuth2User 는 /userInfo 엔드포인트 요청으로 받은 User 클레임 정보로 생성된 객체이다 DefaultOidcUser 는 OpenID Connect 인증을 통해 ID Token 및 클레임 정보가 포함된 객체이다 @AuthenticationPrincipal public void dashboard(@Authenti..

OAuth2 로그인 구현 - OpenID Connect 로그아웃

개념 클라이언트는 로그아웃 엔드포인트를 사용하여 웹 브라우저에 대한 세션과 쿠키를 지운다. 클라이언트 로그아웃 성공 후 OidcClientInitiatedLogoutSuccessHandler 를 호출하여 OpenID Provider 세션 로그아웃 요청한다 OpenID Provider 로그아웃이 성공하면 지정된 위치로 리다이렉트 한다 인가서버 메타데이터 사양에 있는 로그아웃 엔드 포인트는 end_session_endpoint 로 정의되어 있다 endSessionEndpoint = http://localhost:8080/realms/oauth2/protocol/openid-connect/logout API 설정

OAuth2 로그인 구현 - UserInfo 엔드포인트 요청하기

DefaultOAuth2UserService public OAuth2User loadUser(OAuth2UserRequest userRequest) OAuth2UserRequestEntityConverter OAuth2UserRequest 를 RequestEntity 로 컨버터 한다 RestOperations RequestEntity 로 인가서버에 요청하고 ResponseEntity 로 응답받는다 OAuth2User 타입의 객체를 반환한다 흐름 인가 서버에게 /userinfo 엔드 포인트로 요청을 하고, 이때 사용되는 서비스가 DefaultOAuth2UserService이다. 인가 서버가 응답으로 ResponseEntity에 값을 가지고 변환작업(ResponseEntity -> DefaultOAuth2U..

OAuth2 로그인 구현 - Oauth 2.0 User 모델 소개

액세스 토큰을 사용해서 UserInfo 엔드포인트 요청으로 최종 사용자의 (리소스 소유자) 속성을 가져오며 OAuth2User 타입의 객체를 리턴한다 구현체로 DefaultOAuth2UserService 와 OidcUserService 가 제공된다 DefaultOAuth2UserService 표준 OAuth 2.0 Provider를 지원하는 OAuth2UserService 구현체다 OAuth2UserRequest 에 Access Token 을 담아 인가서버와 통신 후 사용자의 속성을 가지고 온다 최종 OAuth2User 타입의 객체를 반환한다 OidcUserService OpenID Connect 1.0 Provider를 지원하는 OAuth2UserService 구현체다 OidcUserRequest 에 ..

OAuth2 로그인 구현 - Access Token 교환하기

OAuth2LoginAuthenticationFilter 인가서버로부터 리다이렉트 되면서 전달된 code를 인가서버의 Access Token으로 교환하고 Access Token 이 저장된 OAuth2LoginAuthenticationToken을 AuthenticationManager에 위임하여 UserInfo 정보를 요청해서 최종 사용자에 로그인한다. OAuth2AuthorizedClientRepository를 사용하여 OAuth2AuthorizedClient 를 저장한다. 인증에 성공하면 OAuth2AuthenticationToken 이 생성되고 SecurityContext에 저장되어 인증 처리를 완료한다 요청 매핑 Url : RequestMatcher : /login/oauth2/code/* OAut..

OAuth2 로그인 구현 - Authorization Code 요청하기

OAuth2AuthorizationRequestRedirectFilter 클라이언트는 사용자의 브라우저를 통해 인가 서버의 권한 부여 엔드포인트로 리다이렉션하여 권한 코드 부여 흐름을 시작한다. 요청 매핑 Url AuthorizationRequestMatcher : /oauth2/authorization/{registrationId}* AuthorizationEndpointConfig.authorizationRequestBaseUri 를 통해 재정의될 수 있다 DefaultOAuth2AuthorizationRequestResolver 웹 요청에 대하여 OAuth2AuthorizationRequest 객체를 최종 완성한다 /oauth2/authorization/{registrationId}와 일치하는지 확..

OAuth2 로그인 구현 - OAuth 2.0 Login Page 생성

OAuth 2.0 로그인 페이지 자동 생성 기본적으로 OAuth 2.0 로그인 페이지는 DefaultLoginPageGeneratingFilter 가 자동으로 생성해 준다 이 디폴트 로그인 페이지는 OAuth 2.0 클라이언트명을 보여준다 링크를 누르면 인가 요청을 (또는 OAuth 2.0 로그인을) 시작할 수 있다 요청 매핑 Url RequestMatcher : /oauth2/authorization/{registrationId}* 디폴트 로그인 페이지를 재정의하려면 oauth2Login().loginPage() 를 사용하면 된다 TEST DefaultLoginPage 이동 @EnableWebSecurity public class OAuth2ClientConfig { @Bean public Securi..

OAuth2LoginConfigurer 초기화 이해

설정 클래스 생성 API 설정 SecurityFilterChain 타입의 빈을 생성해서 보안 필터를 구성한다 HttpSecurity에 있는 oauth2Login()과 oauth2Client() API를 정의하고 빌드한다 OAuth2LoginCOnfigurer 초기화 및 설정 OAuth2LoginAuthenticationFilter(/login/oauth2/code/*) Access token 교환 및 사용자 정보 엔드 포인트 요청 필터 Authentication Code 방식을 2단계 방식에서 사용되는 필터(code 값을 통해 token을 얻을 때 사용) clientRegistrationRepository: clientRegistration가 인가 서버의 엔드포인트 정보, URL을 가지고 있기 떄문에 이..

자동설정에 의한 초기화 과정 이해

OAuth2ImportSelector가 로드되면서, 분기에 의해 참에 해당하는 설정 클래스를 Load 한다. 현재는 OAuth2ClientConfiguration을 로드한다. OAuth2ClientConfiguration는 OAuth2CLientWebMvcImportSelector를 OAuth2CLientWebMvcImportSelector는 OAuth2ClientWebMvcSecurityConfiguration을 로드한다. OAuth2ClientWebMvcSecurityConfiguration는 DefaultOAuth2AuthorizedClientManager, HandlerMethodArgumentResolver를 로드한다. OAuth2ClientAutoConfiguration(자동 설정 클래스)이 ..

ClientRegistrationRepository 이해 및 활용

ClientRegistrationRepository는 OAuth 2.0 & OpenID Connect 1.0의 ClientRegistration 저장소 역할을 한다. 클라이언트 등록 정보는 궁극적으로 인가 서버가 저장하고 관리하는데 이 레포지토리는 인가 서버에 일차적으로 저장된 클라이언트 등록 정보의 일부를 검색하는 기능을 제공한다. 스프링 부트 2.X 자동 설정은 spring.security.oauth2.client.registration.[registrationId] 하위 프로퍼티를 ClientRegistration 인스턴스에 바인딩하며, 각 ClientRegistration 객체를 ClientRegistrationRepository 안에 구성한다. ClientRegistrationRepository..