인프런 커뮤니티 질문&답변

신석균님의 프로필 이미지
신석균

작성한 질문수

스프링 시큐리티 OAuth2

subject type을 pairwise 변경 문의

작성

·

432

·

수정됨

0

subject_type을 pairwise로 변경 하려고 Spring Authorization Server 공식 문서(현재 1.0.1)와 소스(1.0.1과 강의에 사용된 0.31) 소스를 봐도 subject_type 를 변경하는 API는 찿지 못했는데 Spring Authorization Server 에서는 지원하지 않는 걸까요?

https://docs.spring.io/spring-authorization-server/docs/current/reference/html/core-model-components.html#oauth2-token-customizer

문서를 참조하여 acesss token 과 id token 의 cliams 정보를 커스터마이징한 소스에서 pairwise 유형으로 설정하고 providerConfigurationEndpoint을 커스텀 하여 openid-configuration discovery metadata 의 정보를 변경하면 될까요?

@Bean
public OAuth2TokenGenerator<?> tokenGenerator(JWKSource<SecurityContext> jwkSource) {
    JwtEncoder jwtEncoder = new NimbusJwtEncoder(jwkSource);
    JwtGenerator jwtGenerator = new JwtGenerator(jwtEncoder);
    jwtGenerator.setJwtCustomizer(jwtCustomizer());
    OAuth2AccessTokenGenerator accessTokenGenerator = new OAuth2AccessTokenGenerator();
    OAuth2RefreshTokenGenerator refreshTokenGenerator = new OAuth2RefreshTokenGenerator();
    return new DelegatingOAuth2TokenGenerator(
        jwtGenerator, accessTokenGenerator, refreshTokenGenerator);
}

@Bean
public OAuth2TokenCustomizer<JwtEncodingContext> jwtCustomizer() {
    return context -> {;
        JwtClaimsSet.Builder claims = context.getClaims();
        OidcUserResponseDto user = (OidcUserResponseDto)context.getPrincipal().getPrincipal();
        claims.subject(user.getEmpId());
        claims.claim("dept_id", user.getDeptId());
        claims.claim("locale", user.getLocale());
    };
}

.........

authorizationServerConfigurer.tokenGenerator(tokenGenerator);

 

참고 현재 설정된 openid-configuration의 subject_types_supported 정보

답변 1

0

정수원님의 프로필 이미지
정수원
지식공유자

일단 메타데이터를 변경하는 API 는 제공하고 있습니다.

@Configuration(proxyBeanMethods = false)
public class AuthorizationServerConfig {

    @Bean
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception {

        OAuth2AuthorizationServerConfigurer authorizationServerConfigurer =  new OAuth2AuthorizationServerConfigurer();

        http.apply(authorizationServerConfigurer);

        authorizationServerConfigurer
            .authorizationEndpoint(Customizer.withDefaults());

        // 메타데이터 커스트마이징
        authorizationServerConfigurer.oidc(OidcConfigurer ->
                OidcConfigurer.providerConfigurationEndpoint(config ->
                        config.providerConfigurationCustomizer(providerConfiguration -> providerConfiguration.subjectType("pairwise"))));

위 코드처럼 선언하면 메타데이터의 각 항목의 지원하는 값들은 추가 및 변경이 가능합니다.

그리고 말씀하신 것 처럼 실제로 pairwise 타입을 지원하기 위한 클레임 값을 커스트마이징하도록 구현해 주어야 합니다.

http://localhost:19001/iam/.well-known/openid-configuration 로 요청해 보면

image로 추가되고

image

변경된 항목이 보여지고 있습니다.

신석균님의 프로필 이미지
신석균

작성한 질문수

질문하기