
Spring Boot + Swagger sind ein eingespieltes Team, um die eigenen Rest-APIs als OpenApi Beschreibung zur Verfügung zu stellen. Dafür bedarf es kaum Aufwand, reicht es doch die entsprechenden Abhängigkeiten per Maven zu definieren (für OpenApi 3.0 : org.springdoc, springdoc-openapi-ui).
Klar. In aller Regel wollen wir zusätzliche Information für unsere Schnittstellen bereitstellen und spätestens, wenn unsere Rest-Aufrufe eine Authentifizierung benötigen bedarf es zusätzlicher Konfiguration um z.B. die swagger-ui nutzen zu können. Setzen wir dabei auf eine OAuth2 Variante, z.B. mit Keycloak könnte die einfachste der Konfigurationen so aussehen:
@Configuration
public class OpenApiConfig {
@Value("${app.version}")
private String appVersion;
@Value("${app.name}")
private String appName;
@Value("${app.security.auth-server-url}")
private String authServerUrl;
@Value("${app.security.realm}")
private String realm;
@Value("${app.security.client-ui}")
private String client;
@Bean
public OpenAPI customOpenAPI() {
OAuthFlows flows = new OAuthFlows();
OAuthFlow flow = new OAuthFlow();
flow.setAuthorizationUrl(authServerUrl + "/realms/" + realm + "/protocol/openid-connect/auth");
Scopes scopes = new Scopes();
flow.setScopes(scopes);
flows = flows.implicit(flow);
return new OpenAPI()
.components(new Components().addSecuritySchemes("keycloak",
new SecurityScheme().type(SecurityScheme.Type.OAUTH2).flows(flows)))
.info(new Info().title(appName)
.version(appVersion))
.addSecurityItem(new SecurityRequirement().addList("keycloak",
Arrays.asList("read", "write")));
}
}
1 Kommentar. Hinterlasse eine Antwort
Also if you want to fill client id automatically use following in your application.properties file
springdoc.swagger-ui.oauth.clientId=myClientId
springdoc.swagger-ui.oauth.clientSecret=clientSecret