분류 전체보기 1341

@RegisteredOAuth2AuthorizedClient 이해 및 활용

파라미터를 OAuth2AuthorizedClient 타입 인자로 리졸브 해준다 OAuth2AuthorizedClientArgumentResolver 에서 요청을 가로채어 유형별로 권한 부여 흐름을 실행하도록 한다 이 방법은 OAuth2AuthorizedClientManager 나 OAuth2AuthorizedClientService 로 OAuth2AuthorizedClient 에 접근하는 것보다 편리하다 @RegisteredOAuth2AuthorizedClient를 선언하고 OAuth2AuthorizedClient 를 인자로 지정한 메서드이면 OAuth2AuthorizedClientArgumentResolver 가 실행되면서 OAuth2AuthorizedClientManager 를 통해 인가 처리한다 t..

DefaultOAuth2AuthorizedClientManager -필터 기반으로 구현하기

OAuth2AuthorizeRequest 이후, 과정은 이전과 동일하다. CustomOAuth2LoginAuthenticationFilter를 사용해서, 요청을 보낸다는 부분만 다르다. Test CustomOAuth2AuthenticationFilter public class CustomOAuth2AuthenticationFilter extends AbstractAuthenticationProcessingFilter { private static final String DEFAULT_FILTER_PROCESSING_URI = "/oauth2Login/**"; private DefaultOAuth2AuthorizedClientManager oAuth2AuthorizedClientManager; privat..

DefaultOAuth2AuthorizedClientManager - Refresh Token 권한 부여 구현하기

AccessToken을 재발급받기 위해 RefreshToken을 사용한다. AccessToken은 보통 5~10분 정도의 만료시간을 가지며, 만약 유출되었을 경우에도 10분 이후에는 유출된 토큰을 더 이상 사용 못하게 한다. 5~10분마다 재인증을 받을 경우 번거롭기 때문에 RefreshToken을 사용해, AccessToken이 만료되더라도 RefreshToken을 통해 재인증을 받지 않고 발급받을 수 있도록 한다. PasswordOAuth2AuthorizedClientProvider에서 OAuth2AuthorizedClient 정보가 있고, token이 만료되었으며, refresh 토큰이 만료되지 않았다면, RefreshTokenOAuth2AuthrizedClientProvider로 토큰 재 발급 처..

DefaultOAuth2AuthorizedClientManager - Client Credentials 권한 부여 구현하기

OAuth2AuthorizeRequest에 요청 정보를 담아 OAuth2AuthoriedClientManager에 요청을 한다. OAuth2AuthoriedClientManager는 OAuth2AuthoriedClient 가 존재 하지 않는지를 판단하고 존재하지 않는다면, OAuth2AuthoriedContext 정보를 토대로 인가를 받는다. OAuth2AuthoriedContext가 ClientCredentialsOAuth2AuthorizedClientProvider에 전달이 되고, OAuth2AuthoriedClient와 token이 만료되었는지 확인한다 이후부터는 DefaultClientCredentialsTokenReponseClient, DefaultClientCredentialsGrantReq..

DefaultOAuth2AuthorizedClientManager - Resource Owner Password 권한 부여 구현하기

Resource Owner Password OAuth2AuthorizeRequest(요청 객체)를 OAuth2AuthorizedClientManager에 전달한다. 만약 OAuth2AuthorizedClient 객체가 null이 아닐 경우 인증된 사용자로 보고 바로 return 을 한다. 만약 OAuth2AuthorizedClient 객체가 null일 경우 OAuth2AuthorizationContext에 저장하여, PasswordOAuth2AuthorizedClientProvider에게 클라이언트 인가 요청을 한다. OAuth2AuthorizedClient가 존재하고, AccessToken이 만료되지 않았다면 권한 부여는 다시 하지 않는다. OAuth2AuthorizedClient가 존재하고, Acce..

DefaultOAuth2AuthorizedClientManager

OAuth2AuthorizedClientManager OAuth2AuthorizedClient 를 전반적으로 관리하는 인터페이스 OAuth2AuthorizedClientProvider 로 OAuth 2.0 클라이언트에 권한 부여 Client Credentials Flow Resource Owner Password Flow Refresh Token Flow OAuth2AuthorizedClientService 나 OAuth2AuthorizedClientRepository 에 OAuth2AuthorizedClient 저장을 위임한 후 OAuth2AuthorizedClient 최종 반환 사용자 정의 OAuth2AuthorizationSuccessHandler 및 OAuth2AuthorizationFailure..

OAuth2AuthorizedClient 이해 및 활용

OAuth2AuthorizedClient OAuth2AuthorizedClient 는 인가받은 클라이언트를 의미하는 클래스다. 최종 사용자(리소스 소유자)가 클라이언트에게 리소스에 접근할 수 있는 권한을 부여하면, 클라이언트를 인가된 클라이언트로 간주한다 OAuth2AuthorizedClient 는 AccessToken과 RefreshToken을 ClientRegistration (클라이언트)와 권한을 부여한 최종 사용자인 Principal과 함께 묶어 준다 OAuth2AuthorizedClient 의 AccessToken 을 사용해서 리소스 서버의 자원에 접근 할 수 있으며 인가서버와의 통신으로 토큰을 검증할 수 있다 OAuth2AuthorizedClient 의 ClientRegistration과 Ac..

OAuth2ClientConfigurer 초기화 이해

OAuth2AuthorizationCodeAuthenticationProvider, DefaultAuthorizationCodeTokenResponseClient, OAuth2AuthorizationRequestRedirectFilter는 Client가 인증 서버로 Code를 요청할 때 사용한다. OAuth2AuthorizationCodeGrantFilter 같은 경우에는 Client가 인증 서버로 토큰을 받을 때 사용한다. OAuth2AuthorizationCodeGrantFilter는 클라이언트의 인증 처리까지만 진행해 주지 최종 인증까지 진행해주지는 않는다.

API 커스텀 구현 - OAuth2AuthorizationRequestResolver

OAuth2AuthorizationRequestResolver Authorization Code Grant 방식에서 클라이언트가 인가서버로 권한부여 요청할 때 실행되는 클래스 OAuth2AuthorizationRequestResolver 는 OAuth 2.0 인가 프레임워크에 정의된 표준 파라미터 외에 다른 파라미터를 추가하는 식으로 인가 요청을 할 때 사용한다 DefaultOAuth2AuthorizationRequestResolver 가 디폴트 구현체로 제공 되며Consumer 속성에 커스텀할 내용을 구현한다 application.yml 설정 TEST build.gradle dependencies { implementation 'org.springframework.boot:spring-boot-star..

API 커스텀 구현 -Authorization BaseUrl & Redirection BaseUrl

Authorization BaseUrl authorizationEndpoint().baseUrl(“/oauth2/v1/authorization”) 은 권한 부여 요청 BaseUri를 커스텀한다 1단계 권한 부여 요청을 처리하는 OAuth2AuthorizationRequestRedirectFilter 에서 요청에 대한 매칭여부를 판단한다 설정에서 변경한 값이 클라이언트의 링크 정보와 일치하도록 맞추어야 한다 Redirection BaseUrl redirectionEndpoint.baseUri("/login/v1/oauth2/code/*") 은 인가 응답의 baseUri를 커스텀한다 Token 요청을 처리하는 OAuth2LoginAuthenticationFilter 에서 요청에 대한 매칭여부를 판단한다 ap..