public Startup(IConfiguration configuration) { this.Configuration = configuration; this.AuthConfiguration = configuration.GetSection(AuthConfiguration.Section).Get <AuthConfiguration>(); this.SwaggerConfiguration = configuration.GetSection(SwaggerConfiguration.Section).Get <SwaggerConfiguration>(); this.ApiMetadata = configuration.GetSection(ApiMetadataConfiguration.Section).Get <ApiMetadataConfiguration>(); }
/// <summary> /// This method gets called by the runtime. Use this method to add Swagger services to the container. /// </summary> /// <param name="services">services to configure</param> /// <param name="authConfiguration">auth Configuration</param> /// <param name="apiVersion">api version</param> public static void ConfigureServices(IServiceCollection services, AuthConfiguration authConfiguration, ApiMetadataConfiguration apiMetaData) { services.AddSwaggerGen(c => { foreach (ApiVersionData apiVersionData in apiMetaData.ApiVersions) { var openApiInfo = new OpenApiInfo { Version = apiVersionData.Version, Title = apiVersionData.Title, Description = apiVersionData.Description, TermsOfService = !string.IsNullOrEmpty(apiVersionData.TermsOfService) ? new Uri(apiVersionData.TermsOfService) : null }; if (apiMetaData.ApiContactData != null) { openApiInfo.Contact = new OpenApiContact { Name = apiMetaData.ApiContactData.Name, Email = apiMetaData.ApiContactData.Email, Url = !string.IsNullOrEmpty(apiMetaData.ApiContactData.Url) ? new Uri(apiMetaData.ApiContactData.Url) : null, }; } c.SwaggerDoc(apiVersionData.Version, openApiInfo); } if (authConfiguration?.IsEnabled == true) { if (authConfiguration.AuthType.ToUpper() == AuthConstants.Azure) { // Azure c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme { Type = SecuritySchemeType.OAuth2, Flows = new OpenApiOAuthFlows { Implicit = new OpenApiOAuthFlow { AuthorizationUrl = new Uri($"{authConfiguration.Authority}/oauth2/v2.0/authorize"), TokenUrl = new Uri($"{authConfiguration.Authority}/oauth2/v2.0/token"), Scopes = new Dictionary <string, string> { { $"{authConfiguration.Scope}", authConfiguration.Scope } } } } }); } else if ((authConfiguration.AuthType.ToUpper() == AuthConstants.Auth0) || (authConfiguration.AuthType.ToUpper() == AuthConstants.Bearer)) { // Auth0 c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { Name = "Authorization", In = ParameterLocation.Header, Type = SecuritySchemeType.OAuth2, Flows = new OpenApiOAuthFlows { Implicit = new OpenApiOAuthFlow { Scopes = new Dictionary <string, string> { { "openid", "openid" }, { "email", "email" }, { "profile", "profile" }, }, AuthorizationUrl = new Uri($"{authConfiguration.Authority}/authorize?audience={authConfiguration.Audience}") } } }); } c.OperationFilter <SecurityRequirementsOperationFilter>(); } // Apply the filters c.OperationFilter <RemoveVersionFromParameter>(); c.DocumentFilter <ReplaceVersionWithExactValueInPath>(); }); services.AddSwaggerGenNewtonsoftSupport(); }
/// <summary> /// Configure application /// </summary> /// <param name="app">Application to configure</param> /// <param name="swaggerConfiguration">swagger Configuration</param> /// <param name="authConfiguration">auth Configuration</param> /// <param name="apiVersion">api version</param> public static void Configure(IApplicationBuilder app, SwaggerConfiguration swaggerConfiguration, AuthConfiguration authConfiguration, ApiMetadataConfiguration apiMetaData) { app.UseSwagger(c => { c.PreSerializeFilters.Add((swagger, httpReq) => { swagger.Servers = new List <OpenApiServer> { new OpenApiServer { Url = $"{httpReq.Scheme}://{httpReq.Host.Value}" } }; }); }); // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.), // specifying the Swagger JSON endpoint. app.UseSwaggerUI(c => { foreach (ApiVersionData apiVersionData in apiMetaData.ApiVersions) { c.SwaggerEndpoint($"/swagger/{apiVersionData.Version}/swagger.json", $"{apiVersionData.Version} Docs"); } c.RoutePrefix = string.Empty; c.DisplayRequestDuration(); if (authConfiguration?.IsEnabled == true) { c.OAuthClientId(swaggerConfiguration.ClientId); c.OAuthRealm(authConfiguration.Application); c.OAuthAppName(swaggerConfiguration.ApplicationName); c.OAuthScopeSeparator(" "); } }); }