작성
·
355
0
ClientRegistrationRepository 를 구성하는 방법으로
client_id, secret 을 properties 나 빈으로 만들어 준비하는 방식으로 많이 예제가 있는데 Resource Owner 와 Client 가 동일해 client_credentials 방식으로 인가를 진행하고 싶을 경우 어떻게 customizing 할 수 있을까요?
고객사마다 가입해 client_id, secret 을 발급받는 상황에서는 미리 properties 나 bean 으로 하드 코딩 해둘 수 없을 것 같습니다.
답변 2
0
client_credentials 방식으로 인가를 진행하는 부분은
섹션 8. OAuth 2.0 Client - oauth2Client() >
DefaultOAuth2AuthorizedClientManager - Client Credentials 권한 부여 구현하기
를 참고하시면 됩니다.
그리고 클라이언트를 구성하는 방식은 현재 스프링 시큐리티에서 설정파일이나 빈을 통해서 구성할 수 있도록 지원하고 있습니다. 이 부분을 하드 코딩이 아닌 동적으로 구성하기 위해서는 별도의 커스트 마이징이 필요한데 빈으로 구성하는 방식을 DB 등과 연동해서 구현하는 식으로 해야 할 수도 있습니다.
저도 동적으로 구성하는 방식은 아직 해보지 않아서 구체적인 답변을 드리기가 어려운점 양해 바랍니다.
0
안녕하세요, 인프런 AI 인턴입니다.
ClientRegistrationRepository
를 커스터마이징하여 동적으로 client_id
와 client_secret
을 관리하고 싶으신 경우, 먼저 RegistrationClientRepository
빈을 직접 정의하여 사용하셔야 합니다. 이 빈을 사용하면 프로퍼티 파일이 아닌 데이터베이스 또는 다른 저장소에 있는 클라이언트 정보를 기반으로 동적으로 클라이언트를 등록할 수 있습니다.
예를 들면 RegisteredClientRepository
인터페이스를 구현하는 클래스를 작성하고, 이 클래스 내에서 필요에 따라 데이터베이스에서 클라이언트 정보를 조회하여 RegisteredClient
객체를 생성할 수 있습니다.
다음은 RegisteredClientRepository
인터페이스를 구현하는 예제 코드입니다.
import org.springframework.security.oauth2.server.authorization.client.RegisteredClient;
import org.springframework.security.oauth2.server.authorization.client.RegisteredClientRepository;
public class CustomClientRegistrationRepository implements RegisteredClientRepository {
// 데이터베이스 접근 로직을 담당할 서비스나 리포지토리
@Override
public void save(RegisteredClient registeredClient) {
// 데이터베이스에 클라이언트 정보를 저장하는 로직
}
@Override
public RegisteredClient findById(String id) {
// 데이터베이스에서 id에 해당하는 클라이언트 정보를 조회하여
// RegisteredClient 객체를 생성하여 반환하는 로직
}
@Override
public RegisteredClient findByClientId(String clientId) {
// 데이터베이스에서 clientId에 해당하는 클라이언트 정보를 조회하여
// RegisteredClient 객체를 생성하여 반환하는 로직
}
}
구현 클래스에는 실제 데이터베이스와 연동하는 로직을 포함하여 findByClientId
메서드를 통해 특정 클라이언트 ID의 구성을 검색할 수 있으며, 클라이언트 정보를 저장하는 등의 기능을 구현합니다.
그리고 스프링 컨테이너에 이 빈을 등록하게 되면 이를 통해 클라이언트 등록 정보를 동적으로 관리할 수 있게 됩니다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class OAuth2ServerConfig {
@Bean
public RegisteredClientRepository registeredClientRepository() {
return new CustomClientRegistrationRepository();
}
}
이렇게 커스텀 RegisteredClientRepository
를 스프링 컨텍스트에 등록하면, 스프링 시큐리티는 이를 사용하여 OAuth2 클라이언트를 동적으로 관리하게 됩니다.
고객사별로 client_id
와 client_secret
을 발급받는 경우, 발급 과정에서 생성한 클라이언트 정보를 이 커스텀 RegisteredClientRepository
를 통해 등록하고 관리하면 됩니다. 이렇게 함으로써, 프로퍼티 파일이나 하드코딩된 빈 대신에 동적으로 클라이언트를 관리하는 것이 가능합니다.
자세한 사항은 Spring Boot Reference Documentation 부분을 참고하시기 바랍니다.