Ejemplo n.º 1
0
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            IEnumerable <AuthorizeAttribute> authorizeAttributes = new List <AuthorizeAttribute>();

            // Determine if the operation has the Authorize attribute
            if (context.ApiDescription.ActionDescriptor is ControllerActionDescriptor)
            {
                authorizeAttributes = ((ControllerActionDescriptor)context.ApiDescription.ActionDescriptor).MethodInfo.ReflectedType.GetCustomAttributes(typeof(AuthorizeAttribute), true).Select(a => (AuthorizeAttribute)a);
            }

            authorizeAttributes = authorizeAttributes.Concat(context.MethodInfo.GetCustomAttributes(true).OfType <AuthorizeAttribute>().Select(a => (AuthorizeAttribute)a));

            if (!authorizeAttributes.Any())
            {
                return;
            }

            // Initialize the operation.security property
            if (operation.Security == null)
            {
                operation.Security = new List <OpenApiSecurityRequirement>();
            }

            // Add the appropriate security definition to the operation
            var securityRequirements = new OpenApiSecurityRequirement();

            foreach (var item in authorizeAttributes)
            {
                if (item.AuthenticationSchemes == null || item.AuthenticationSchemes.Contains(JwtBearerDefaults.AuthenticationScheme))
                {
                    if (!securityRequirements.ContainsKey(SwaggerSecuritySchemes.BearerReference))
                    {
                        securityRequirements.Add(SwaggerSecuritySchemes.BearerReference, new List <string>());
                    }
                }
                if (item.AuthenticationSchemes == null || item.AuthenticationSchemes.Contains(CookieAuthenticationDefaults.AuthenticationScheme))
                {
                    if (!securityRequirements.ContainsKey(SwaggerSecuritySchemes.CookiesReference))
                    {
                        securityRequirements.Add(SwaggerSecuritySchemes.CookiesReference, new List <string>());
                    }
                }
                if (item.AuthenticationSchemes == null || item.AuthenticationSchemes.Contains(BasicAuthenticationDefaults.AuthenticationScheme))
                {
                    if (!securityRequirements.ContainsKey(SwaggerSecuritySchemes.BasicReference))
                    {
                        securityRequirements.Add(SwaggerSecuritySchemes.BasicReference, new List <string>());
                    }
                }
            }

            if (securityRequirements.Count() == 0)
            {
                securityRequirements.Add(SwaggerSecuritySchemes.CookiesReference, new List <string>());
            }

            operation.Security.Add(securityRequirements);
        }
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            //AllowAnonymous at Controller or Action level always takes priority!
            var allowAnonymous = context.MethodInfo.ReflectedType.GetCustomAttributes(true)
                                 .Union(context.MethodInfo.GetCustomAttributes(true))
                                 .OfType <AllowAnonymousAttribute>().Any();

            //https://github.com/domaindrivendev/Swashbuckle.AspNetCore
            //AuthorizeAttributes are AND not OR.
            var authAttributes = context.MethodInfo.ReflectedType.GetCustomAttributes(true)
                                 .Union(context.MethodInfo.GetCustomAttributes(true))
                                 .OfType <AuthorizeAttribute>();

            if (allowAnonymous || !authAttributes.Any())
            {
                return;
            }

            // Initialize the operation.security property
            if (operation.Security == null)
            {
                operation.Security = new List <OpenApiSecurityRequirement>();
            }

            // Add the appropriate security definition to the operation
            var securityRequirements = new OpenApiSecurityRequirement();

            //If no scheme is specified any scheme can be used.
            foreach (var item in authAttributes)
            {
                if (item.AuthenticationSchemes == null || item.AuthenticationSchemes.Contains(JwtBearerDefaults.AuthenticationScheme))
                {
                    if (!securityRequirements.ContainsKey(SwaggerSecuritySchemes.BearerReference))
                    {
                        securityRequirements.Add(SwaggerSecuritySchemes.BearerReference, new List <string>());
                    }
                }
                if (item.AuthenticationSchemes == null || item.AuthenticationSchemes.Contains(CookieAuthenticationDefaults.AuthenticationScheme))
                {
                    if (!securityRequirements.ContainsKey(SwaggerSecuritySchemes.CookiesReference))
                    {
                        securityRequirements.Add(SwaggerSecuritySchemes.CookiesReference, new List <string>());
                    }
                }
                if (item.AuthenticationSchemes == null || item.AuthenticationSchemes.Contains(BasicAuthenticationDefaults.AuthenticationScheme))
                {
                    if (!securityRequirements.ContainsKey(SwaggerSecuritySchemes.BasicReference))
                    {
                        securityRequirements.Add(SwaggerSecuritySchemes.BasicReference, new List <string>());
                    }
                }
            }

            operation.Security.Add(securityRequirements);
        }
        public static void ConfigureSwagger(this IServiceCollection services)
        {
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo
                {
                    Title   = "Org.ERM API",
                    Version = "v1"
                });
                var securityScheme = new OpenApiSecurityScheme()
                {
                    Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.ApiKey,
                    Scheme      = "bearer",
                };

                c.AddSecurityDefinition("Bearer", securityScheme);

                // Add security requirements globally.  If needs to be unique per operation then use IOperationFilter.
                var securityRequirement = new OpenApiSecurityRequirement();
                securityRequirement.Add(securityScheme, new string[] { });
                c.AddSecurityRequirement(securityRequirement);
            });
        }
Ejemplo n.º 4
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddSingleton <DBContext>();
            services.AddScoped <IUserRepository, UserRepository>();
            services.AddScoped <UserService>();

            services.AddJwtAuthentication(Configuration);
            services.AddControllers();
            services.AddHealthChecks().AddMongoDb(Configuration.GetValue <string>("MongoDBConnectionString"));

            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "Auth", Version = "v1"
                });
                var securitySchema = new OpenApiSecurityScheme
                {
                    Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.Http,
                    Scheme      = "bearer",
                    Reference   = new OpenApiReference
                    {
                        Type = ReferenceType.SecurityScheme,
                        Id   = "Bearer"
                    }
                };
                c.AddSecurityDefinition("Bearer", securitySchema);

                var securityRequirement = new OpenApiSecurityRequirement();
                securityRequirement.Add(securitySchema, new[] { "Bearer" });
                c.AddSecurityRequirement(securityRequirement);
            });
        }
Ejemplo n.º 5
0
        private OpenApiSecurityRequirement GetSecurity(IEnumerable <string> requiredScopes)
        {
            var requirements = new OpenApiSecurityRequirement();

            var scopes = IdentityServiceScopes
                         .ScopeDescriptions
                         .Where(x => requiredScopes.Contains(x.Key))
                         .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

            var oauth2 = new OpenApiSecurityScheme
            {
                Reference = new OpenApiReference()
                {
                    Type = ReferenceType.SecurityScheme,
                    Id   = "oauth2"
                }
            };

            //var jwt = new OpenApiSecurityScheme
            //{
            //    Description = "IdentityService Jwt",
            //    In = ParameterLocation.Header,
            //    Type = SecuritySchemeType.Http
            //};

            requirements.Add(oauth2, requiredScopes.ToList());

            //requirements.Add(jwt, requiredScopes.ToList());

            return(requirements);
        }
Ejemplo n.º 6
0
        public static void AddSwagger(this IServiceCollection service)
        {
            service.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo
                {
                    Version     = "v1",
                    Title       = "API",
                    Description = "Clean Architecture",
                    Contact     = new OpenApiContact()
                    {
                        Name  = "Berkay Yerdelen",
                        Email = "*****@*****.**"
                    }
                });
                var securitySchema = new OpenApiSecurityScheme
                {
                    Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.Http,
                    Scheme      = "bearer",
                    Reference   = new OpenApiReference
                    {
                        Type = ReferenceType.SecurityScheme,
                        Id   = "Bearer"
                    }
                };
                c.AddSecurityDefinition("Bearer", securitySchema);

                var securityRequirement = new OpenApiSecurityRequirement();
                securityRequirement.Add(securitySchema, new[] { "Bearer" });
                c.AddSecurityRequirement(securityRequirement);
            });
        }
        public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
        {
            var flows = new OpenApiOAuthFlows();

            flows.ClientCredentials = new OpenApiOAuthFlow()
            {
                //AuthorizationUrl = new Uri(OAuthSettings.Auth, UriKind.Absolute),
                TokenUrl = new Uri(OAuthSettings.OktaTokenUrl, UriKind.Absolute),
                Scopes   = OAuthSettings.Scopes
            };
            var oauthScheme = new OpenApiSecurityScheme()
            {
                Type        = SecuritySchemeType.OAuth2,
                Description = "OAuth2 Description",
                Name        = "Authorization",
                In          = ParameterLocation.Header,
                Flows       = flows,
                Scheme      = OAuthSettings.SchemeName
            };
            var securityrRequirements = new OpenApiSecurityRequirement();

            securityrRequirements.Add(oauthScheme, new List <string>()
            {
                "Bearer"
            });
            swaggerDoc.SecurityRequirements.Add(securityrRequirements);
        }
Ejemplo n.º 8
0
        public static IHostBuilder CreateWebHostBuilder(string[] args)
        {
            return
                (Host.CreateDefaultBuilder(args)
                 .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.ConfigureServices(x =>
                {
                    x.AddFrameworkService();
                    x.AddLayui();
                    x.AddSignalR();

                    x.AddSwaggerGen(c =>
                    {
                        c.SwaggerDoc("v1", new OpenApiInfo {
                            Title = "My API", Version = "v1"
                        });
                        var bearer = new OpenApiSecurityScheme()
                        {
                            Description = "JWT Bearer",
                            Name = "Authorization",
                            In = ParameterLocation.Header,
                            Type = SecuritySchemeType.ApiKey
                        };
                        c.AddSecurityDefinition("Bearer", bearer);
                        var sr = new OpenApiSecurityRequirement();
                        sr.Add(new OpenApiSecurityScheme
                        {
                            Reference = new OpenApiReference
                            {
                                Type = ReferenceType.SecurityScheme,
                                Id = "Bearer"
                            }
                        }, new string[] { });
                        c.AddSecurityRequirement(sr);
                    });
                });

                webBuilder.Configure(x =>
                {
                    var configs = x.ApplicationServices.GetRequiredService <Configs>();
                    if (configs.IsQuickDebug == true)
                    {
                        x.UseSwagger();
                        x.UseSwaggerUI(c =>
                        {
                            c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
                        });
                    }
                    x.UseFrameworkService();
                    //添加WebSocket支持,SignalR优先使用WebSocket传输
                    x.UseWebSockets();
                    x.UseEndpoints(routes =>
                    {
                        routes.MapHub <ClientNotifyHub>("/signalr");
                    });
                });
            }
                                           ));
        }
Ejemplo n.º 9
0
        public void InstallerServices(IServiceCollection services, IConfiguration configuration)
        {
            services.AddSwaggerGen(x =>
            {
                x.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "News API", Version = "v1"
                });

                var security = new OpenApiSecurityRequirement();
                security.Add(new OpenApiSecurityScheme
                {
                    Reference = new OpenApiReference
                    {
                        Type = ReferenceType.SecurityScheme,
                        Id   = "Bearer"
                    },
                    Scheme = "Bearer",
                    Name   = "Bearer",
                    In     = ParameterLocation.Header
                }, new List <string>());
                x.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
                {
                    Scheme      = "Bearer",
                    Description = "JWT Authorization header using the bearer scheme",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.ApiKey
                });
                x.AddSecurityRequirement(security);
            });
        }
Ejemplo n.º 10
0
        private static void AddSwagger(this IServiceCollection services)
        {
            services.AddSwaggerGen(s =>
            {
                s.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "League Draft", Version = "v1"
                });
                var securitySchema = new OpenApiSecurityScheme
                {
                    Description = "JWT Authorization header using the Bearer scheme",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.Http,
                    Scheme      = "bearer",
                    Reference   = new OpenApiReference
                    {
                        Type = ReferenceType.SecurityScheme,
                        Id   = "Bearer"
                    }
                };
                s.AddSecurityDefinition("Bearer", securitySchema);

                var securityRequirement = new OpenApiSecurityRequirement();
                securityRequirement.Add(securitySchema, new[] { "Bearer" });
                //s.AddSecurityRequirement(securityRequirement);
                //var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                //var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
                //s.IncludeXmlComments(xmlPath);
            });
        }
 public static void AddSwagger(this IServiceCollection services, string name, string titleDoc, string version)
 {
     services.AddSwaggerGen(c =>
     {
         c.SwaggerDoc(name, new OpenApiInfo {
             Title = titleDoc, Version = version
         });
         var securityScheme = new OpenApiSecurityScheme
         {
             Description = @"JWT Authorization header using the Bearer scheme. \r\n\r\n 
               Enter 'Bearer' [space] and then your token in the text input below.
               \r\n\r\nExample: 'Bearer 12345abcdef'",
             Name        = "Authorization",
             In          = ParameterLocation.Header,
             Type        = SecuritySchemeType.ApiKey,
             Scheme      = "bearer",
             Reference   = new OpenApiReference
             {
                 Type = ReferenceType.SecurityScheme,
                 Id   = "Bearer"
             }
         };
         c.AddSecurityDefinition("Bearer", securityScheme);
         var securityRequirement = new OpenApiSecurityRequirement();
         securityRequirement.Add(securityScheme, new[] { "Bearer" });
         c.AddSecurityRequirement(securityRequirement);
     });
 }
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            //获取是否添加登录特性
            var authAttributes = context.MethodInfo.DeclaringType.GetCustomAttributes(true)
                                 .Union(context.MethodInfo.GetCustomAttributes(true))
                                 .OfType <AuthorizeAttribute>().Any();

            if (authAttributes)
            {
                operation.Responses.Add("401", new OpenApiResponse {
                    Description = "暂无访问权限"
                });
                operation.Responses.Add("403", new OpenApiResponse {
                    Description = "禁止访问"
                });
                //给api添加锁的标注
                var item = new OpenApiSecurityRequirement();
                var key  = new OpenApiSecurityScheme();
                key.Name = "oauth2";
                key.Type = SecuritySchemeType.OpenIdConnect;

                item.Add(key, new[] { "JsPortalResource" });
                operation.Security = new List <OpenApiSecurityRequirement> {
                    item
                };
            }
        }
        public static void AddOAuthSecurity(this Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenOptions setup)
        {
            var flows = new OpenApiOAuthFlows();

            flows.ClientCredentials = new OpenApiOAuthFlow()
            {
                TokenUrl = new Uri(OAuthSettings.TokenUrl, UriKind.Relative),
                Scopes   = OAuthSettings.Scopes
            };
            var oauthScheme = new OpenApiSecurityScheme()
            {
                Type        = SecuritySchemeType.OAuth2,
                Description = "OAuth2 Description",
                Name        = OAuthSettings.AuthHeaderName,
                In          = ParameterLocation.Query,
                Flows       = flows,
                Scheme      = OAuthSettings.SchemeName,
            };

            //securityrDefinition
            setup.AddSecurityDefinition("Bearer", oauthScheme);

            //securityrRequirements
            var securityrRequirements = new OpenApiSecurityRequirement();

            securityrRequirements.Add(oauthScheme, new List <string>()
            {
            });
            setup.AddSecurityRequirement(securityrRequirements);
        }
        public static IServiceCollection AddSwaggerConfiguration(this IServiceCollection services)
        {
            services.AddSwaggerGen(s =>
            {
                s.SwaggerDoc("Usuario", new OpenApiInfo {
                    Title = "Usuarios", Version = "v1"
                });

                var securitySchema = new OpenApiSecurityScheme
                {
                    Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.ApiKey,
                    Scheme      = "bearer",
                    Reference   = new OpenApiReference
                    {
                        Type = ReferenceType.SecurityScheme,
                        Id   = "bearer"
                    }
                };

                s.AddSecurityDefinition("bearer", securitySchema);

                var securityRequirement = new OpenApiSecurityRequirement();
                securityRequirement.Add(securitySchema, new[] { "bearer" });
                s.AddSecurityRequirement(securityRequirement);
            });

            return(services);
        }
        public static OpenApiSecurityRequirement LoadSecurityRequirement(ParseNode node)
        {
            var mapNode = node.CheckMapNode("security");

            var securityRequirement = new OpenApiSecurityRequirement();

            foreach (var property in mapNode)
            {
                var scheme = LoadSecuritySchemeByReference(
                    mapNode.Context,
                    mapNode.Diagnostic,
                    property.Name);

                var scopes = property.Value.CreateSimpleList(value => value.GetScalarValue());

                if (scheme != null)
                {
                    securityRequirement.Add(scheme, scopes);
                }
                else
                {
                    node.Diagnostic.Errors.Add(
                        new OpenApiError(node.Context.GetLocation(), $"Scheme {property.Name} is not found"));
                }
            }

            return(securityRequirement);
        }
Ejemplo n.º 16
0
        public static void AddHmcrSwagger(this IServiceCollection services, IWebHostEnvironment env)
        {
            services.AddSwaggerGen(options =>
            {
                options.SwaggerDoc("v1", new OpenApiInfo
                {
                    Version     = "v1",
                    Title       = "HMCR REST API",
                    Description = "Highway Maintenance Contract Reporting System"
                });

                var filePath = Path.Combine(System.AppContext.BaseDirectory, "Hmcr.Api.xml");
                options.IncludeXmlComments(filePath);

                var securitySchema = new OpenApiSecurityScheme
                {
                    Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.Http,
                    Scheme      = "bearer",
                    Reference   = new OpenApiReference
                    {
                        Type = ReferenceType.SecurityScheme,
                        Id   = "Bearer"
                    }
                };

                options.AddSecurityDefinition("Bearer", securitySchema);

                var securityRequirement = new OpenApiSecurityRequirement();
                securityRequirement.Add(securitySchema, new[] { "Bearer" });
                options.AddSecurityRequirement(securityRequirement);
            });
        }
Ejemplo n.º 17
0
        public static IServiceCollection AddSwaggerServices(this IServiceCollection services)
        {
            services.AddSwaggerGen(options =>
            {
                options.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "ShareHope", Version = "v1"
                });
                options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
                {
                    Description = "JWT Authorization header using the bearer scheme",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.ApiKey
                });

                var security = new OpenApiSecurityRequirement();
                security.Add(new OpenApiSecurityScheme {
                    Name = "Bearer"
                }, new List <string>());

                options.AddSecurityRequirement(security);
            });

            return(services);
        }
Ejemplo n.º 18
0
        private void SetupSwagger(IServiceCollection services)
        {
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "ASIC API", Version = "v1"
                });

                var scheme = new OpenApiSecurityScheme()
                {
                    Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.ApiKey,
                    Scheme      = "Bearer",
                    Reference   = new OpenApiReference
                    {
                        Type = ReferenceType.SecurityScheme,
                        Id   = "Bearer"
                    },
                };

                c.AddSecurityDefinition("Bearer", scheme);
                var openApiSecurityReq = new OpenApiSecurityRequirement();
                openApiSecurityReq.Add(scheme, new List <string>());
                c.AddSecurityRequirement(openApiSecurityReq);
            });
        }
Ejemplo n.º 19
0
        private void ConfigurationSwagger(IServiceCollection services)
        {
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "My API", Version = "v1"
                });

                var currentDir = new DirectoryInfo(AppContext.BaseDirectory);
                foreach (var xmlCommentFile in currentDir.EnumerateFiles("VirtualRoulette.*.xml"))
                {
                    c.IncludeXmlComments(xmlCommentFile.FullName);
                }

                var securitySchema = new OpenApiSecurityScheme
                {
                    Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.Http,
                    Scheme      = "bearer",
                    Reference   = new OpenApiReference
                    {
                        Type = ReferenceType.SecurityScheme,
                        Id   = "Bearer"
                    }
                };
                c.AddSecurityDefinition("Bearer", securitySchema);
                var securityRequirement = new OpenApiSecurityRequirement();
                securityRequirement.Add(securitySchema, new[] { "Bearer" });
                c.AddSecurityRequirement(securityRequirement);
            });
        }
        /// <summary>
        /// Adds Swagger services and configures the Swagger services.
        /// </summary>
        public static IServiceCollection AddSwaggerOptionService(this IServiceCollection services)
        {
            services.AddSwaggerGen(options =>
            {
                var assembly            = typeof(Startup).Assembly;
                var assemblyProduct     = assembly.GetCustomAttribute <AssemblyProductAttribute>().Product;
                var assemblyDescription = assembly.GetCustomAttribute <AssemblyDescriptionAttribute>()?.Description;

                options.DescribeAllParametersInCamelCase();

                options.OperationFilter <ApiVersionOperationFilter>();

                // Set the comments path for the Swagger JSON and UI.
                var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                var xmlPath = System.IO.Path.Combine(System.AppContext.BaseDirectory, xmlFile);
                options.IncludeXmlComments(xmlPath);

                var provider = services.BuildServiceProvider().GetRequiredService <IApiVersionDescriptionProvider>();
                foreach (var apiVersionDescription in provider.ApiVersionDescriptions)
                {
                    if (apiVersionDescription.IsDeprecated)
                    {
                        continue;
                    }

                    var info = new OpenApiInfo()
                    {
                        Title       = assemblyProduct,
                        Description = apiVersionDescription.IsDeprecated
                        ? $"{assemblyDescription} This API version has been deprecated."
                        : assemblyDescription,
                        Version = apiVersionDescription.ApiVersion.ToString(),
                    };
                    options.SwaggerDoc(apiVersionDescription.GroupName, info);
                }

                //https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/1295
                //https://stackoverflow.com/questions/58197244/swaggerui-with-netcore-3-0-bearer-token-authorization
                //options.OperationFilter<TokenOperationFilter>();
                var securitySchema = new OpenApiSecurityScheme
                {
                    Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.Http,
                    Scheme      = "bearer",
                    Reference   = new OpenApiReference
                    {
                        Type = ReferenceType.SecurityScheme,
                        Id   = "Bearer"
                    }
                };
                options.AddSecurityDefinition("Bearer", securitySchema);
                var securityRequirement = new OpenApiSecurityRequirement();
                securityRequirement.Add(securitySchema, new[] { "Bearer" });
                options.AddSecurityRequirement(securityRequirement);
            });

            return(services);
        }
        public static IServiceCollection AddSwaggerDocumentation(this IServiceCollection services)
        {
            services.AddSwaggerGen(c =>
            {
                var securitySchema = new OpenApiSecurityScheme()
                {
                    Description = "在下框中输入请求头中需要添加授权Token",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.ApiKey,
                    Scheme      = "bearer",
                    Reference   = new OpenApiReference
                    {
                        Type = ReferenceType.SecurityScheme,
                        Id   = "Bearer"
                    }
                };

                c.AddSecurityDefinition("Bearer", securitySchema);
                var securityRequirement = new OpenApiSecurityRequirement();
                securityRequirement.Add(securitySchema, Array.Empty <string>());
                c.AddSecurityRequirement(securityRequirement);

                c.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "DR API", Version = "v1"
                });
                c.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, "DR.WebApi.xml"), true); //添加控制器层注释(true表示显示控制器注释)
                c.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, "DR.Models.xml"), true); //添加控制器层注释(true表示显示控制器注释)
                c.IgnoreObsoleteActions();
            });

            return(services);
        }
Ejemplo n.º 22
0
        public void InstallServices(IServiceCollection services, IConfiguration configuration)
        {
            var swaggerSettings = new SwaggerSettings();

            configuration.GetSection(nameof(SwaggerSettings)).Bind(swaggerSettings);
            services.AddSwaggerGen(settings => {
                var security       = new  OpenApiSecurityRequirement();
                var securityScheme = new OpenApiSecurityScheme()
                {
                    Description = "Using Bearer Authorization",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.ApiKey
                };
                security.Add(securityScheme, new List <string>()
                {
                });
                settings.SwaggerDoc("V1", new Microsoft.OpenApi.Models.OpenApiInfo()
                {
                    Description = swaggerSettings.Description,
                    Version     = "V1",
                    Title       = "MarketIO"
                });
                settings.AddSecurityDefinition("Bearer", securityScheme);
                settings.AddSecurityRequirement(security);
            });
            services.AddControllers();
        }
Ejemplo n.º 23
0
    /// <summary>
    /// Registers dependencies needed to provide a Swagger documentation to a API which accepts
    /// bearer authentication.
    /// </summary>
    /// <param name="services">The services.</param>
    /// <param name="apiName">Name of the API.</param>
    /// <param name="apiVersion">The API version.</param>
    /// <param name="apiDescription">The API description.</param>
    /// <param name="assemblyName">Name of the assembly.</param>
    public static void AddSwaggerJsonAndUiBearerApi(this IServiceCollection services, string apiName, string apiVersion,
                                                    string apiDescription, string?assemblyName = null)
    {
        services.AddSwaggerJsonAndUi(apiName, apiVersion, apiDescription, (options) =>
        {
            var securitySchema = new OpenApiSecurityScheme
            {
                Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                Name        = "Authorization",
                In          = ParameterLocation.Header,
                Type        = SecuritySchemeType.Http,
                Scheme      = "bearer",
                Reference   = new OpenApiReference
                {
                    Type = ReferenceType.SecurityScheme,
                    Id   = "Bearer"
                }
            };
            options.AddSecurityDefinition("Bearer", securitySchema);

            var securityRequirement = new OpenApiSecurityRequirement();
            securityRequirement.Add(securitySchema, new[] { "Bearer" });
            options.AddSecurityRequirement(securityRequirement);
        }, assemblyName);
    }
Ejemplo n.º 24
0
 public static IHostBuilder CreateWebHostBuilder(string[] args)
 {
     return
         (Host.CreateDefaultBuilder(args)
          .ConfigureLogging((hostingContext, logging) =>
     {
         logging.ClearProviders();
         logging.AddConsole();
         logging.AddDebug();
         logging.AddWTMLogger();
     })
          .ConfigureWebHostDefaults(webBuilder =>
     {
         webBuilder.ConfigureServices(x =>
         {
             x.AddFrameworkService();
             x.AddLayui();
             x.AddSwaggerGen(c =>
             {
                 c.SwaggerDoc("v1", new OpenApiInfo {
                     Title = "My API", Version = "v1"
                 });
                 var bearer = new OpenApiSecurityScheme()
                 {
                     Description = "JWT Bearer",
                     Name = "Authorization",
                     In = ParameterLocation.Header,
                     Type = SecuritySchemeType.ApiKey
                 };
                 c.AddSecurityDefinition("Bearer", bearer);
                 var sr = new OpenApiSecurityRequirement();
                 sr.Add(new OpenApiSecurityScheme
                 {
                     Reference = new OpenApiReference
                     {
                         Type = ReferenceType.SecurityScheme,
                         Id = "Bearer"
                     }
                 }, new string[] { });
                 c.AddSecurityRequirement(sr);
             });
             x.AddRazorPages().AddRazorRuntimeCompilation();
         });
         webBuilder.Configure(x =>
         {
             var configs = x.ApplicationServices.GetRequiredService <Configs>();
             if (configs.IsQuickDebug == true)
             {
                 x.UseSwagger();
                 x.UseSwaggerUI(c =>
                 {
                     c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
                 });
             }
             x.UseFrameworkService();
         });
     }
                                    ));
 }
Ejemplo n.º 25
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();

            var settings = Configurations.GetAppSettings().Build().GetSection("JwtSettings").Get <JwtSettings>();
            var key      = Encoding.ASCII.GetBytes(settings.SigningKey);

            services.AddAuthentication(c =>
            {
                c.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                c.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(c =>
            {
                c.RequireHttpsMetadata      = false;
                c.SaveToken                 = true;
                c.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = new SymmetricSecurityKey(key),
                    ValidateIssuer           = false,
                    ValidateAudience         = false
                };
            });

            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo
                {
                    Title   = "eReferee - Server",
                    Version = "v1",
                    Contact = new OpenApiContact
                    {
                        Name  = "Sandro Ferreira",
                        Email = string.Empty,
                        Url   = new System.Uri("https://github.com/scafer")
                    }
                });
                var securitySchema = new OpenApiSecurityScheme
                {
                    Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.Http,
                    Scheme      = "bearer",
                    Reference   = new OpenApiReference
                    {
                        Type = ReferenceType.SecurityScheme,
                        Id   = "Bearer"
                    }
                };
                c.AddSecurityDefinition("Bearer", securitySchema);

                var securityRequirement = new OpenApiSecurityRequirement();
                securityRequirement.Add(securitySchema, new[] { "Bearer" });
                c.AddSecurityRequirement(securityRequirement);
            });
        }
Ejemplo n.º 26
0
        public static void ConfigSwagger(this IServiceCollection services)
        {
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo
                {
                    Version = "v1",
                    Title   = "ToDo API",
                });

                c.SwaggerDoc("v2", new OpenApiInfo
                {
                    Version        = "v2",
                    Title          = "POS API",
                    Description    = "A simple example ASP.NET Core Web API",
                    TermsOfService = new Uri("http://codemobiles.com"),
                    Contact        = new OpenApiContact
                    {
                        Name  = "iBlur Blur",
                        Email = "*****@*****.**",
                        Url   = new Uri("http://codemobiles.com"),
                    },
                    License = new OpenApiLicense
                    {
                        Name = "Use under MIT",
                        Url  = new Uri("http://codemobiles.com"),
                    },
                });
                var securitySchema = new OpenApiSecurityScheme
                {
                    Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.Http,
                    Scheme      = "bearer",
                    Reference   = new OpenApiReference
                    {
                        Type = ReferenceType.SecurityScheme,
                        Id   = "Bearer"
                    }
                };
                c.AddSecurityDefinition("Bearer", securitySchema);

                var securityRequirement = new OpenApiSecurityRequirement();
                securityRequirement.Add(securitySchema, new[] { "Bearer" });
                c.AddSecurityRequirement(securityRequirement);

                // Set the comments path for the Swagger JSON and UI.
                var xmlFile = $"{Assembly.GetEntryAssembly().GetName().Name}.xml";
                var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
                c.IncludeXmlComments(xmlPath);

                // Uses full schema names to avoid v1/v2/v3 schema collisions
                // see: https://github.com/domaindrivendev/Swashbuckle/issues/442
                c.CustomSchemaIds(x => x.FullName);
            });
        }
        /// <summary>
        /// Fetches the value of "security" tags from xml documentation and populates operation's security requirement
        /// values.
        /// </summary>
        /// <param name="operation">The operation to be updated.</param>
        /// <param name="element">The xml element representing an operation in the annotation xml.</param>
        /// <param name="settings">The operation filter settings.</param>
        /// <returns>The list of generation errors, if any produced when processing the filter.</returns>
        public IList <GenerationError> Apply(
            OpenApiOperation operation,
            XElement element,
            OperationFilterSettings settings)
        {
            var generationErrors = new List <GenerationError>();

            try
            {
                if (settings == null)
                {
                    throw new ArgumentNullException(nameof(settings));
                }

                if (element == null)
                {
                    throw new ArgumentNullException(nameof(element));
                }

                if (operation == null)
                {
                    throw new ArgumentNullException(nameof(operation));
                }

                var securityElements = element.Elements()
                                       .Where(
                    p => p.Name == KnownXmlStrings.Security);

                if (!securityElements.Any())
                {
                    return(generationErrors);
                }

                var openApiSecurityRequirement = new OpenApiSecurityRequirement();
                var securitySchemeRegistry     = settings.ReferenceRegistryManager.SecuritySchemeReferenceRegistry;

                foreach (var securityElement in securityElements)
                {
                    var securityScheme = securitySchemeRegistry.FindOrAddReference(securityElement);

                    openApiSecurityRequirement.Add(securityScheme, securitySchemeRegistry.Scopes);
                }

                operation.Security.Add(openApiSecurityRequirement);
            }
            catch (Exception ex)
            {
                generationErrors.Add(
                    new GenerationError
                {
                    Message       = ex.Message,
                    ExceptionType = ex.GetType().Name
                });
            }

            return(generationErrors);
        }
Ejemplo n.º 28
0
        public static void AddSwagger(this IServiceCollection services)
        {
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo
                {
                    Version        = "v1",
                    Title          = "API Shell API",
                    Description    = "Shell ASP.NET Core Web API",
                    TermsOfService = new System.Uri("https://www.Pevaar.com"),
                    Contact        = new OpenApiContact()
                    {
                        Name = "Pevaar Softwre Factory", Email = "*****@*****.**"
                    }
                });

                //c.SwaggerDoc("v2", new OpenApiInfo
                //{
                //    Version = "v2",
                //    Title = "New API V2",
                //    Description = "Sample Web API",
                //    TermsOfService = new System.Uri("https://www.talkingdotnet.com"),
                //    Contact = new OpenApiContact() { Name = "Talking Dotnet", Email = "*****@*****.**" }
                //});

                // Set the comments path for the Swagger JSON and UI.
                var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
                c.IncludeXmlComments(xmlPath);

                //Add Bearer
                var securitySchema = new OpenApiSecurityScheme
                {
                    Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.Http,
                    Scheme      = "bearer",
                    Reference   = new OpenApiReference
                    {
                        Type = ReferenceType.SecurityScheme,
                        Id   = "Bearer"
                    }
                };

                c.AddSecurityDefinition("Bearer", securitySchema);

                var securityRequirement = new OpenApiSecurityRequirement();
                securityRequirement.Add(securitySchema, new[] { "Bearer" });
                c.AddSecurityRequirement(securityRequirement);
                //Fin Add Bearer

                //c.DescribeAllEnumsAsStrings();
                //c.DescribeStringEnumsInCamelCase();
            });
        }
Ejemplo n.º 29
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.RequireHttpsMetadata      = false;
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateAudience         = false,
                    ValidateIssuer           = false,
                    ValidateLifetime         = true,
                    IssuerSigningKey         = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration.GetValue <string>("SecretKey"))),
                    ValidateIssuerSigningKey = true,
                    ClockSkew = TimeSpan.Zero
                };
            });

            var conString = Configuration.GetValue <string>("StorageConnectionString");

            services.AddSingleton <ITableStorageContext>(new TableStorageContext(conString));
            services.AddScoped <ITaskService, TaskStorageService>();
            services.AddScoped <IProjectService, ProjectStorageService>();

            services.AddControllers();

            services.AddSwaggerGen(options =>
            {
                options.SwaggerDoc("v1", new OpenApiInfo
                {
                    Version     = "v1",
                    Title       = "Task Manager Api",
                    Description = "Description"
                });

                var securitySchema = new OpenApiSecurityScheme
                {
                    Description = "JWT Authorization header using the Bearer scheme.Example: \"Authorization: Bearer {token}\"",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.Http,
                    Scheme      = "bearer",
                    Reference   = new OpenApiReference
                    {
                        Type = ReferenceType.SecurityScheme,
                        Id   = "Bearer"
                    }
                };
                options.AddSecurityDefinition("Bearer", securitySchema);

                var securityRequirement = new OpenApiSecurityRequirement();
                securityRequirement.Add(securitySchema, new[] { "Bearer" });
                options.AddSecurityRequirement(securityRequirement);
            });

            services.AddAutoMapper(typeof(Startup));
        }
        public static OpenApiSecurityRequirement GetCopy(Dictionary <OpenApiSecurityScheme, IList <string> > right)
        {
            var newSecurityRequirement = new OpenApiSecurityRequirement();

            foreach (var(key, value) in right)
            {
                newSecurityRequirement.Add(key, value);
            }

            return(newSecurityRequirement);
        }