SwaggerOpenIdConfig.java
package access;
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.security.*;
import io.swagger.v3.oas.models.servers.Server;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.ForwardedHeaderFilter;
import static access.security.SecurityConfig.API_TOKEN_HEADER;
@Configuration
@OpenAPIDefinition
public class SwaggerOpenIdConfig {
public static final String OPEN_ID_SCHEME_NAME = "openId";
public static final String API_TOKENS_SCHEME_NAME = "apiTokens";
public static final String BASIC_AUTHENTICATION_SCHEME_NAME = "basic_auth";
@Bean
OpenAPI customOpenApi(@Value("${spring.security.oauth2.client.provider.oidcng.authorization-uri}") String authorizationUrl,
@Value("${spring.security.oauth2.client.provider.oidcng.token-uri}") String tokenUrl,
@Value("${oidcng.discovery-url}") String discoveryURL,
@Value("${oidcng.base-url}") String baseUrl) {
SecurityScheme openIdSecuritySchema = new SecurityScheme()
.type(SecurityScheme.Type.OAUTH2)
.openIdConnectUrl(discoveryURL)
.flows(new OAuthFlows().authorizationCode(new OAuthFlow()
.authorizationUrl(authorizationUrl)
.tokenUrl(tokenUrl)
.scopes(new Scopes().addString("openid", "openid"))));
SecurityScheme apiTokensSecurityScheme = new SecurityScheme()
.type(SecurityScheme.Type.APIKEY)
.in(SecurityScheme.In.HEADER)
.name(API_TOKEN_HEADER);
SecurityScheme basicAuthentication = new SecurityScheme()
.type(SecurityScheme.Type.HTTP)
.scheme("basic");
Components components = new Components()
.addSecuritySchemes(OPEN_ID_SCHEME_NAME, openIdSecuritySchema)
.addSecuritySchemes(API_TOKENS_SCHEME_NAME, apiTokensSecurityScheme)
.addSecuritySchemes(BASIC_AUTHENTICATION_SCHEME_NAME, basicAuthentication);
OpenAPI openAPI = new OpenAPI()
.info(new Info()
.description("Access external API endpoints")
.title("Access API")
.version("v1"))
.addServersItem(new Server()
.url(baseUrl));
openAPI.components(components)
.addSecurityItem(new SecurityRequirement().addList(OPEN_ID_SCHEME_NAME));
return openAPI;
}
@Bean
ForwardedHeaderFilter forwardedHeaderFilter() {
return new ForwardedHeaderFilter();
}
}