package it.inaf.ia2.gms.authn; import it.inaf.ia2.gms.persistence.LoggingDAO; import java.util.List; import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.security.oauth2.resource.DefaultUserInfoRestTemplateFactory; import org.springframework.boot.autoconfigure.security.oauth2.resource.UserInfoRestTemplateCustomizer; import org.springframework.boot.autoconfigure.security.oauth2.resource.UserInfoRestTemplateFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.oauth2.client.OAuth2ClientContext; import org.springframework.security.oauth2.client.resource.OAuth2ProtectedResourceDetails; import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerEndpointsConfiguration; import org.springframework.security.oauth2.provider.ClientDetailsService; import org.springframework.security.oauth2.provider.client.InMemoryClientDetailsService; import org.springframework.security.oauth2.provider.token.DefaultAccessTokenConverter; import org.springframework.security.oauth2.provider.token.ResourceServerTokenServices; import org.springframework.security.oauth2.provider.token.store.jwk.JwkTokenStore; import org.springframework.web.client.RestTemplate; /** * Extending the AuthorizationServerEndpointsConfiguration disables the Spring * Boot ResourceServerTokenServicesConfiguration. */ @Configuration public class OAuth2Config extends AuthorizationServerEndpointsConfiguration { @Value("${security.oauth2.resource.token-info-uri}") private String checkTokenEndpointUrl; @Value("${security.oauth2.client.client-id}") private String clientId; @Bean public ResourceServerTokenServices resourceServerTokenServices(JwkTokenStore jwkTokenStore, LoggingDAO loggingDAO) { GetTokenDataService tokenService = new GetTokenDataService(); DefaultAccessTokenConverter accessTokenConverter = new DefaultAccessTokenConverter(); accessTokenConverter.setUserTokenConverter(new CustomIdTokenConverter(jwkTokenStore, loggingDAO)); tokenService.setAccessTokenConverter(accessTokenConverter); tokenService.setCheckTokenEndpointUrl(checkTokenEndpointUrl); tokenService.setClientId(clientId); return tokenService; } @Bean public ClientDetailsService clientDetailsService() { return new InMemoryClientDetailsService(); } @Bean public UserInfoRestTemplateFactory userInfoRestTemplateFactory( ObjectProvider> customizers, ObjectProvider details, ObjectProvider oauth2ClientContext) { return new DefaultUserInfoRestTemplateFactory(customizers, details, oauth2ClientContext); } @Bean public RestTemplate rapRestTemplate() { return new RestTemplate(); } }