inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 시큐리티 OAuth2

ClientRegistrationRepository 이해 및 활용

ClientRegistrationRepository 커스터마이즈

558

leese

작성한 질문수 11

0

ClientRegistrationRepository 를 구성하는 방법으로

client_id, secret 을 properties 나 빈으로 만들어 준비하는 방식으로 많이 예제가 있는데 Resource Owner 와 Client 가 동일해 client_credentials 방식으로 인가를 진행하고 싶을 경우 어떻게 customizing 할 수 있을까요?

고객사마다 가입해 client_id, secret 을 발급받는 상황에서는 미리 properties 나 bean 으로 하드 코딩 해둘 수 없을 것 같습니다.

java spring spring-boot oauth

답변 2

0

정수원

client_credentials 방식으로 인가를 진행하는 부분은

섹션 8. OAuth 2.0 Client - oauth2Client() >
DefaultOAuth2AuthorizedClientManager - Client Credentials 권한 부여 구현하기

를 참고하시면 됩니다.

그리고 클라이언트를 구성하는 방식은 현재 스프링 시큐리티에서 설정파일이나 빈을 통해서 구성할 수 있도록 지원하고 있습니다. 이 부분을 하드 코딩이 아닌 동적으로 구성하기 위해서는 별도의 커스트 마이징이 필요한데 빈으로 구성하는 방식을 DB 등과 연동해서 구현하는 식으로 해야 할 수도 있습니다.

저도 동적으로 구성하는 방식은 아직 해보지 않아서 구체적인 답변을 드리기가 어려운점 양해 바랍니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

ClientRegistrationRepository를 커스터마이징하여 동적으로 client_idclient_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_idclient_secret을 발급받는 경우, 발급 과정에서 생성한 클라이언트 정보를 이 커스텀 RegisteredClientRepository를 통해 등록하고 관리하면 됩니다. 이렇게 함으로써, 프로퍼티 파일이나 하드코딩된 빈 대신에 동적으로 클라이언트를 관리하는 것이 가능합니다.

자세한 사항은 Spring Boot Reference Documentation 부분을 참고하시기 바랍니다.

authorization-server 라이브러리 질문이 있습니다.

0

75

1

loadUser 중 Missing attribute 'preferred_username' in attributes 에러 발생

0

76

2

JWT 조회 에 대한 질문

0

70

1

password grant 방식 에러 응답

0

88

3

FormLoginConfigure에서 생성하는 필터

0

76

2

현업에서 springboot를 3.5.5 를 사용해서 공부중인데...

0

282

2

Jdbc 관련 강의 및 깃헙 문의

0

77

1

OAuth2AuthorizedClient 이해 및 활용 강의 내용 질문

0

208

1

UserInfo 엔드포인트 요청 실습

0

73

1

RFC 문서에서의 AccessToken 발급 방식 궁금한점

0

150

1

강의자료.zip 를 다운로드 받았는데 압축이 풀리지 않습니다. 확인 부탁드려요

0

139

2

OIDC SSO 관련 질문 입니다.

0

130

1

AuthenticationEntryPoint 강의 누락 문의

0

121

1

cors설정방법

0

115

1

jwt decoder 토큰 검증 시 질문

0

221

1

클라이언트에서 userinfo 엔드포인트 호출 시 질문

0

184

2

JOSE 구성요소의 api에 관한 질문

0

140

2

스프링 부트 3버전으로 따라가시는 분들 참고하세요

1

527

1

CustomOAuth2AuthenticationFilter 구현 중 질문

0

145

2

AuthenticationManager 생성시점

0

117

1

FormLogin과 Oauth2Client 둘 중 사용하는 시점

0

127

1

postman userinfo 엔드포인트 질문

0

135

2

강의 수강신청하고 듣기 전입니다 질문있습니다.

0

113

1

인증 코드를 통해 발급 받은 토큰의 관리

0

198

1