해결된 질문
작성
·
212
0
현업 환경 상 1.0.2 버전에서 개발하고 있는데 OAuth2AuthorizationServerConfigurer 에 OIDC 관련 configurer 가 빠진 것으로 보입니다.
공식문서를 봐도 customizing 하는 부분은 있는데
default 설정은 어떻게 가져다 쓸 수 있는지 안내되어있는 곳을 못찾았는데요.
get /userinfo 요청을 보내도 OidcUserInfoEndpointFilter 에 디버깅이 걸리지 않고 FilterChainProxy 에서도 Filter 리스트에서 빠져 있습니다.
어디를 찾아봐야할까요?
private Map<Class<? extends AbstractOAuth2Configurer>, AbstractOAuth2Configurer> createConfigurers() {
Map<Class<? extends AbstractOAuth2Configurer>, AbstractOAuth2Configurer> configurers = new LinkedHashMap<>();
configurers.put(OAuth2ClientAuthenticationConfigurer.class, new OAuth2ClientAuthenticationConfigurer(this::postProcess));
configurers.put(OAuth2AuthorizationServerMetadataEndpointConfigurer.class, new OAuth2AuthorizationServerMetadataEndpointConfigurer(this::postProcess));
configurers.put(OAuth2AuthorizationEndpointConfigurer.class, new OAuth2AuthorizationEndpointConfigurer(this::postProcess));
configurers.put(OAuth2TokenEndpointConfigurer.class, new OAuth2TokenEndpointConfigurer(this::postProcess));
configurers.put(OAuth2TokenIntrospectionEndpointConfigurer.class, new OAuth2TokenIntrospectionEndpointConfigurer(this::postProcess));
configurers.put(OAuth2TokenRevocationEndpointConfigurer.class, new OAuth2TokenRevocationEndpointConfigurer(this::postProcess));
return configurers;
}
답변 2
0
네
확인해 보니까 OidcConfigurer 는 기본적으로 비활성화 되어 있습니다.
그래서 명시적으로 사용할 수 있도록 OAuth2AuthorizationServerConfigurer 클래스의 아래 메서드를 호출해 주어야 합니다.
/**
* Configures OpenID Connect 1.0 support (disabled by default).
*
* @param oidcCustomizer the {@link Customizer} providing access to the {@link OidcConfigurer}
* @return the {@link OAuth2AuthorizationServerConfigurer} for further configuration
*/
public OAuth2AuthorizationServerConfigurer oidc(Customizer<OidcConfigurer> oidcCustomizer) {
OidcConfigurer oidcConfigurer = getConfigurer(OidcConfigurer.class);
if (oidcConfigurer == null) {
addConfigurer(OidcConfigurer.class, new OidcConfigurer(this::postProcess));
oidcConfigurer = getConfigurer(OidcConfigurer.class);
}
oidcCustomizer.customize(oidcConfigurer);
return this;
}
호출하는 방법은 대략 다음과 같습니다.
@Bean
public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception {
OAuth2AuthorizationServerConfigurer authorizationServerConfigurer =
new OAuth2AuthorizationServerConfigurer();
RequestMatcher endpointsMatcher = authorizationServerConfigurer
.getEndpointsMatcher();
// OidcConfigurer 활성화
authorizationServerConfigurer.oidc(Customizer.withDefaults());
http.build();
}
Oidc 는 아무래도 인증을 위한 전용 프로토콜이다 보니 꼭 사용할 필요가 있을 경우에만 활성화 하도록 변경된 것 같습니다.
0
안녕하세요, 인프런 AI 인턴입니다. leese님, Spring Security의 OAuth2AuthorizationServerConfigurer에서 기본 제공되는 OIDC(OpenID Connect) 설정이 누락되어 있음을 발견하셨군요.
OIDC 설정이 기본적으로 포함되지 않은 상황에서는 사용자 정보 엔드포인트(/userinfo
)가 작동하지 않을 수 있습니다. 기본 OIDC 지원을 포함하는 방법에 대한 정보는 제가 알려드릴 수 있는 내용이 현재 없습니다.
공식 문서에서 OIDC를 위한 디폴트 설정을 찾으시는 것이 어렵다면, OIDC 지원과 관련된 추가 설정을 위해 OAuth2AuthorizationServerConfigurer를 상속받아 필요한 컴포넌트를 수동으로 설정할 수 있습니다. 이 경우 OpenID Connect 1.0 프로토콜을 준수하는 UserInfo 엔드포인트, ID 토큰 발행 등의 로직을 직접 구현해야 할 수도 있습니다.
다른 개발자들의 구현 사례, 예시 코드, 또는 스프링 시큐리티와 관련된 커뮤니티 포럼을 참고하여 필요한 설정을 진행해보시는 것을 권장드립니다. 때로는 보다 최신 버전을 사용하거나, 관련된 추가적인 문서를 찾아보는 것이 빠른 해결책이 될 수도 있습니다.
질문하신 내용의 최신 버전에 대한 정보는 Spring Boot Reference Documentation v3.1.5와 관련된 Authorization Server 문서에서 확인하실 수 있습니다. 문제를 직면하셨을 때, 더 자세한 지원을 받거나 특정한 구현 사항에 대한 해결책을 찾으시려면 스프링 시큐리티 개발팀에 이슈를 제기하거나 스택 오버플로우 같은 프로그래밍 커뮤니티에 질문을 등록하는 것도 좋은 방법입니다.
현재 환경에서 필요한 OIDC 관련 설정을 진행하기 위해서는 추가적인 커스터마이징이 필요할 것으로 보입니다.