Spring Boot/Security

ClientRegistration 커스텀 in Oauth2

최-코드 2024. 10. 10. 12:11

상황 : Oauth2AuthorizedClientService를 구현하려했는데 ClientRegistration을 인자로 보낼 수 없어서 이 클래스를 만들어주어야 한다.

 

https://rosoa0475.tistory.com/294로 가면 Oauth2AuthorizedClientService를 커스텀한 것을 볼 수 있다.

 

ClientRegistration

@Component
public class CustomClientRegistration {
	//기존의 application 설정파일에 있던 정보 옮김
    public ClientRegistration kakaoClientRegistration() {
        return ClientRegistration.withRegistrationId("kakao")
                .clientId("11aaf58c5c320697ce18b46e42a2ca66")
                .clientSecret("NNqpfNJ6x30IT5VT7TjIQbEsnDCSfvyh")
                .redirectUri("http://localhost:8080/login/oauth2/code/kakao")
                .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
                .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_POST)
                .authorizationUri("https://kauth.kakao.com/oauth/authorize")
                .tokenUri("https://kauth.kakao.com/oauth/token")
                .userInfoUri("https://kapi.kakao.com/v2/user/me")
                .userNameAttributeName("id")
                .build();
    }
}

 

ClientRegistrationRepository

@Configuration
@RequiredArgsConstructor
public class CustomClientRegistrationRepo {
    private final CustomClientRegistration customClientRegistration;
	
    //registration이 많아봐야 5개 이하이므로 메모리에 저장
    @Bean
    public ClientRegistrationRepository clientRegistrationRepository() {
        return new InMemoryClientRegistrationRepository(
                customClientRegistration.kakaoClientRegistration());
    }
}

 

SecurityConfig

private final ClientRegistrationRepository clientRegistrationRepository;

...

http
	.oauth2Login(oauth2 -> oauth2 //custom한 clientRegistrationRepo 등록
    		.clientRegistrationRepository(clientRegistrationRepository));