public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            if (!context.ApiDescription.TryGetMethodInfo(out var methodInfo))
            {
                return;
            }

            var authRequired = methodInfo.GetCustomAttributes(true)
                               .Union(methodInfo?.DeclaringType?.GetCustomAttributes(true))
                               .OfType <AuthorizeAttribute>()
                               .Any();

            if (authRequired)
            {
                operation.Responses.Add("401", new OpenApiResponse {
                    Description = "Unauthorized"
                });
                operation.Responses.Add("403", new OpenApiResponse {
                    Description = "Forbidden"
                });

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

                operation.Security = new List <OpenApiSecurityRequirement>
                {
                    new OpenApiSecurityRequirement
                    {
                        [oAuthScheme] = new[] { "api" },
                    },
                };
            }
        }
示例#2
0
 public void InstallService(IServiceCollection services, IConfiguration configuration)
 {
     services.AddSwaggerGen(c =>
     {
         c.SwaggerDoc("v1", new OpenApiInfo
         {
             Version     = "v1",
             Title       = "Api Servisi",
             Description = ".NET Core 5.0",
             Contact     = new OpenApiContact
             {
                 Name = "Demo Api Project",
                 Url  = new Uri("http://www.google.com"),
             }
         });
         var securitySchema = new OpenApiSecurityScheme
         {
             Description = "JWT Yetkilendirme, Bearer Şeması kullanarak. Örneğin: \"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 {
             { securitySchema, new[] { "Bearer" } }
         };
         c.AddSecurityRequirement(securityRequirement);
         //c.OperationFilter<RequiredHeaderParameter>();
     });
     ServiceTool.Create(services);
 }
        public static IServiceCollection SwaggerConfiguration(this IServiceCollection services)
        {
            services.AddSwaggerGen(
                options =>
            {
                options.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "UniAtHome.API", Version = "v1"
                });

                options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme()
                {
                    Name         = "Authorization",
                    Type         = SecuritySchemeType.ApiKey,
                    Scheme       = "Bearer",
                    BearerFormat = "JWT",
                    In           = ParameterLocation.Header,
                    Description  = "JWT Authorization header using the Bearer scheme."
                });

                var securityScheme = new OpenApiSecurityScheme
                {
                    Reference = new OpenApiReference
                    {
                        Id   = "Bearer",
                        Type = ReferenceType.SecurityScheme
                    }
                };
                var requirements = new OpenApiSecurityRequirement
                {
                    { securityScheme, new List <string>() }
                };
                options.AddSecurityRequirement(requirements);
            }
                );
            return(services);
        }
示例#4
0
        public void Apply(OpenApiOperation Operation, OperationFilterContext Context)
        {
            if (GetAuthorizationLevel(Context) == AuthorizationLevel.User)
            {
                Operation.Responses["401"] = new OpenApiResponse {
                    Description = "Unauthorized"
                };
                Operation.Responses["403"] = new OpenApiResponse {
                    Description = "Forbidden"
                };

                OpenApiSecurityScheme Scheme = new OpenApiSecurityScheme {
                    Reference = new OpenApiReference {
                        Type = ReferenceType.SecurityScheme, Id = "BearerAuth"
                    }
                };

                Operation.Security = new List <OpenApiSecurityRequirement> {
                    new OpenApiSecurityRequirement {
                        [Scheme] = new List <string>()
                    }
                };
            }
        }
示例#5
0
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            // Policy names map to scopes
            var requiredScopes = context.MethodInfo
                                 .GetCustomAttributes(true)
                                 .OfType <Microsoft.AspNetCore.Authorization.AuthorizeAttribute>()
                                 .Select(attr => attr.Policy)
                                 .Distinct().ToList();

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

            operation.Responses.Add("401", new OpenApiResponse {
                Description = "Unauthorized"
            });
            operation.Responses.Add("403", new OpenApiResponse {
                Description = "Forbidden"
            });

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

            operation.Security = new List <OpenApiSecurityRequirement>
            {
                new OpenApiSecurityRequirement
                {
                    [oAuthScheme] = requiredScopes
                }
            };
        }
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            var allowAnonymousAttributes = GetDeclaredMethodAndTypeAttributes <AllowAnonymousAttribute>(context.MethodInfo);
            IEnumerable <string> requiredScopes;

            if (allowAnonymousAttributes.Count > 0)
            {
                requiredScopes = new List <string>(0);
            }
            else
            {
                var authorizeAttributes = GetDeclaredMethodAndTypeAttributes <AuthorizeAttribute>(context.MethodInfo);
                requiredScopes = authorizeAttributes
                                 .Select(attr => attr.Policy)
                                 .Distinct();
            }

            if (requiredScopes.Any())
            {
                var securityScheme = new OpenApiSecurityScheme
                {
                    Reference = new OpenApiReference
                    {
                        Type = ReferenceType.SecurityScheme,
                        Id   = Constants.Authentication.SecuritySchemeName
                    }
                };
                operation.Security = new List <OpenApiSecurityRequirement>
                {
                    new OpenApiSecurityRequirement
                    {
                        [securityScheme] = requiredScopes.ToList()
                    }
                };
            }
        }
        public static void UseSwaggerSecurityOptions(this SwaggerGenOptions options)
        {
            var bearer = new OpenApiSecurityScheme()
            {
                Description = "JWT Bearer",
                Name        = "Authorization",
                In          = ParameterLocation.Header,
                Type        = SecuritySchemeType.ApiKey
            };

            options.AddSecurityDefinition("Bearer", bearer);
            var sr = new OpenApiSecurityRequirement();

            sr.Add(new OpenApiSecurityScheme
            {
                Reference = new OpenApiReference
                {
                    Type = ReferenceType.SecurityScheme,
                    Id   = "Bearer"
                }
            }, Array.Empty <string>());
            options.AddSecurityRequirement(sr);
            options.SchemaFilter <SwaggerFilter>();
        }
        static OpenApiSecurity()
        {
            OpenApiSecurityScheme = new OpenApiSecurityScheme
            {
                Description  = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                Name         = "Authorization",
                In           = ParameterLocation.Header,
                Type         = SecuritySchemeType.Http,
                Scheme       = "bearer",
                BearerFormat = "JWT"
            };

            OpenApiSecurityRequirement = new OpenApiSecurityRequirement {
                {
                    new OpenApiSecurityScheme {
                        Reference = new OpenApiReference {
                            Type = ReferenceType.SecurityScheme,
                            Id   = "Bearer"
                        }
                    },
                    new List <string>()
                }
            };
        }
示例#9
0
        public static IServiceCollection AddSwaggerDocumentation(this IServiceCollection services)
        {
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "SkiNet API", Version = "v1"
                });
                var securitySchema = new OpenApiSecurityScheme
                {
                    Description = "JWT Auth Bearer Scheme",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.Http,
                    Scheme      = "bearer",
                    Reference   = new OpenApiReference
                    {
                        Type = ReferenceType.SecurityScheme,
                        Id   = "Bearer"
                    }
                };
            });

            return(services);
        }
        public static IServiceCollection AddSwaggerDocumentations(this IServiceCollection services)
        {
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo
                {
                    Version     = "v1",
                    Title       = "DzShopping API",
                    Description = "A simple example ASP.NET Core Web API"
                });


                // Config swagger for identity
                var securitySchema = new OpenApiSecurityScheme
                {
                    Description = "JWT Auth Bearer Scheme",
                    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 {
                    { securitySchema, new[] { "Bearer" } }
                };
                c.AddSecurityRequirement(securityRequirement);
            });

            return(services);
        }
示例#11
0
 // This method gets called by the runtime. Use this method to add services to the container.
 public void ConfigureServices(IServiceCollection services)
 {
     services.AddControllers();
     services.AddSwaggerGen(c =>
     {
         // add Basic Authentication
         var basicSecurityScheme = new OpenApiSecurityScheme
         {
             Type      = SecuritySchemeType.Http,
             Scheme    = "basic",
             Reference = new OpenApiReference {
                 Id = "BasicAuth", Type = ReferenceType.SecurityScheme
             }
         };
         c.AddSecurityDefinition(basicSecurityScheme.Reference.Id, basicSecurityScheme);
         OpenApiSecurityRequirement securityRequirement = new OpenApiSecurityRequirement
         {
             { basicSecurityScheme, new string[] { } }
         };
         c.AddSecurityRequirement(securityRequirement);
     });
     services.AddAuthentication("BasicAuthentication")
     .AddScheme <AuthenticationSchemeOptions, BasicAuthenticationHandler>("BasicAuthentication", null);
 }
示例#12
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            services.AddSingleton <IPasswordGenerator, PasswordHandler.PasswordGenerator>(t => new PasswordHandler.PasswordGenerator(Configuration.GetSection("PasswordAppSettings")["ValidCharacters"]));

            //Let's set up Swagger UI
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "PasswordGenerator", Version = "v1"
                });
                var securityScheme = new OpenApiSecurityScheme
                {
                    Type        = SecuritySchemeType.ApiKey,
                    Scheme      = "ApiKey",
                    In          = ParameterLocation.Header,
                    Name        = Configuration.GetSection("PasswordAppSettings")["ApiKey_Name"],
                    Description = "Please provide an api key in the header",
                    Reference   = new OpenApiReference {
                        Id = "ApiKey", Type = ReferenceType.SecurityScheme
                    }
                };
                c.AddSecurityDefinition(securityScheme.Reference.Id, securityScheme);


                c.AddSecurityRequirement(new OpenApiSecurityRequirement
                {
                    { securityScheme, new string[] { } }
                });

                // 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);
            });
        }
示例#13
0
        private static void ConfigureSwaggerServices(ServiceConfigurationContext context)
        {
            var apiSecurityScheme = new OpenApiSecurityScheme()
            {
                Description = "JWT Authorization header using the bearer scheme. Example: \"Authorization: Bearer {token}\"",
                Name        = "Authorization",
                In          = ParameterLocation.Header,
                Type        = SecuritySchemeType.ApiKey
            };

            context.Services.AddSwaggerGen(
                options =>
            {
                options.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "MaterialSystem API", Version = "v1"
                });
                options.DocInclusionPredicate((docName, description) => true);
                IncludeXmlComments(options);
                options.AddSecurityDefinition("bearerAuth", apiSecurityScheme);
                var apiSecurityRequirement = new OpenApiSecurityRequirement
                {
                    {
                        new OpenApiSecurityScheme
                        {
                            Reference = new OpenApiReference
                            {
                                Type = ReferenceType.SecurityScheme,
                                Id   = "bearerAuth"
                            }
                        },
                        new List <string>()
                    }
                };
                options.AddSecurityRequirement(apiSecurityRequirement);
            });
        }
        public static IServiceCollection AddSwaggerConfiguration(this IServiceCollection services, string apiName)
        => services.AddSwaggerGen(opt =>
        {
            opt.SwaggerDoc("v1", new OpenApiInfo
            {
                Title   = $"Api de {apiName}",
                Contact = new OpenApiContact {
                    Name = "Regis / Ivan", Email = "*****@*****.**"
                }
            });

            var security = new OpenApiSecurityScheme
            {
                Description  = "Insira o token JWT dessa maneira: Bearer {token}",
                Name         = "Authorization",
                In           = ParameterLocation.Header,
                Type         = SecuritySchemeType.ApiKey,
                Scheme       = "Bearer",
                BearerFormat = "JWT"
            };

            opt.AddSecurityDefinition("Bearer", security);

            opt.AddSecurityRequirement(new OpenApiSecurityRequirement()
            {
                {
                    new OpenApiSecurityScheme
                    {
                        Reference = new OpenApiReference {
                            Id = "Bearer", Type = ReferenceType.SecurityScheme
                        }
                    },
                    Array.Empty <string>()
                }
            });
        });
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            // Policy names map to scopes
            IEnumerable <string> requiredScopes = context.MethodInfo
                                                  .GetCustomAttributes(true)
                                                  .OfType <AuthorizeAttribute>()
                                                  .Select(attr => attr.Policy)
                                                  .Distinct();

            IEnumerable <string> enumerable = requiredScopes as string[] ?? requiredScopes.ToArray();

            if (enumerable.Any())
            {
                operation.Responses.Add("401", new OpenApiResponse {
                    Description = "Unauthorized"
                });
                operation.Responses.Add("403", new OpenApiResponse {
                    Description = "Forbidden"
                });

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

                operation.Security = new List <OpenApiSecurityRequirement>
                {
                    new OpenApiSecurityRequirement
                    {
                        [oAuthScheme] = enumerable.ToList(),
                    },
                };
            }
        }
示例#16
0
        /// <summary>
        /// 自定义AddSwagger扩展
        /// </summary>
        /// <param name="services"></param>
        /// <returns></returns>
        public static IServiceCollection AddSwagger(this IServiceCollection services)
        {
            return(services.AddSwaggerGen(options =>
            {
                // 遍历并应用Swagger分组信息
                ApiInfos.ForEach(x =>
                {
                    options.SwaggerDoc(x.UrlPrefix, x.OpenApiInfo);
                });

                // API注释所需XML文件
                options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, "Resources/MeowvBlog.API.xml"));

                #region 小绿锁,JWT身份认证配置

                var security = new OpenApiSecurityScheme
                {
                    Description = "JWT模式授权,请输入 Bearer {Token} 进行身份验证",
                    Name = "Authorization",
                    In = ParameterLocation.Header,
                    Type = SecuritySchemeType.ApiKey
                };
                options.AddSecurityDefinition("oauth2", security);
                options.AddSecurityRequirement(new OpenApiSecurityRequirement {
                    { security, new List <string>() }
                });
                options.OperationFilter <AddResponseHeadersFilter>();
                options.OperationFilter <AppendAuthorizeToSummaryOperationFilter>();
                options.OperationFilter <SecurityRequirementsOperationFilter>();

                #endregion

                // 应用Controller的API文档描述信息
                options.DocumentFilter <SwaggerDocumentFilter>();
            }));
        }
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            // Check for authorize attribute
            var hasAuthorize = context.MethodInfo.DeclaringType.GetCustomAttributes(true).OfType<AuthorizeAttribute>().Any() ||
                               context.MethodInfo.GetCustomAttributes(true).OfType<AuthorizeAttribute>().Any();

            if (!hasAuthorize) return;

            operation.Responses.TryAdd("401", new OpenApiResponse { Description = "Unauthorized" });
            operation.Responses.TryAdd("403", new OpenApiResponse { Description = "Forbidden" });

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

            operation.Security = new List<OpenApiSecurityRequirement>
            {
                new OpenApiSecurityRequirement
                {
                    [ oAuthScheme ] = new [] { "ownerapi" }
                }
            };
        }
        /// <inheritdoc />
        public List <OpenApiSecurityRequirement> GetOpenApiSecurityRequirement(MethodInfo element, NamingStrategy namingStrategy = null)
        {
            var attributes = element.GetCustomAttributes <OpenApiSecurityAttribute>(inherit: false);

            if (!attributes.Any())
            {
                return(new List <OpenApiSecurityRequirement>());
            }

            var requirements = new List <OpenApiSecurityRequirement>();

            foreach (var attr in attributes)
            {
                var scheme = new OpenApiSecurityScheme()
                {
                    Type             = attr.SchemeType,
                    Description      = attr.Description,
                    Name             = GetSecuritySchemeName(attr),
                    In               = GetSecuritySchemeLocation(attr),
                    Scheme           = GetSecuritySchemeScheme(attr, namingStrategy),
                    BearerFormat     = GetSecurityBearerFormat(attr),
                    Flows            = GetSecurityOAuthFlows(attr),
                    OpenIdConnectUrl = GetSecurityOpenIdConnectUrl(attr),
                    Reference        = GetSecurityReference(attr),
                };

                var value = GetSecurityOAuthScopes(attr, scheme.Flows);

                var requirement = new OpenApiSecurityRequirement();
                requirement.Add(scheme, value);

                requirements.Add(requirement);
            }

            return(requirements);
        }
示例#19
0
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            bool hasAllowAnonymousAttr = context.MethodInfo.DeclaringType.GetCustomAttributes(true).OfType <AllowAnonymousAttribute>().Any() ||
                                         context.MethodInfo.GetCustomAttributes(true).OfType <AllowAnonymousAttribute>().Any();

            if (hasAllowAnonymousAttr)
            {
                return;
            }

            operation.Responses.TryAdd(StatusCodes.Status401Unauthorized.ToString(),
                                       new OpenApiResponse {
                Description = "Unauthorized"
            });

            operation.Responses.TryAdd(StatusCodes.Status403Forbidden.ToString(),
                                       new OpenApiResponse {
                Description = "Forbidden"
            });

            var jwtBearerScheme = new OpenApiSecurityScheme
            {
                Reference = new OpenApiReference {
                    Type = ReferenceType.SecurityScheme, Id = JwtBearerDefaults.AuthenticationScheme
                }
            };


            operation.Security = new List <OpenApiSecurityRequirement>
            {
                new OpenApiSecurityRequirement
                {
                    [jwtBearerScheme] = new string[] { }
                }
            };
        }
示例#20
0
        public static IServiceCollection AddSwaggerDocumentation(this IServiceCollection services)
        {
            services.AddSwaggerGen(options =>
            {
                options.SwaggerDoc("CoreSwagger", new OpenApiInfo
                {
                    Title       = "SeyirNet By SeyirMobil-FK",
                    Version     = "2.0.0",
                    Description = "SeyirNet Service 2019 by SeyirMobil-FK",
                    Contact     = new OpenApiContact()
                    {
                        Name  = "Swagger Implementation Faruk Kaya",
                        Url   = new Uri("http://ngnet.seyirmobil.com"),
                        Email = "*****@*****.**"
                    },
                    TermsOfService = new Uri("http://swagger.io/terms/")
                });

                var securityScheme = new OpenApiSecurityScheme()
                {
                    In           = ParameterLocation.Header,
                    Type         = SecuritySchemeType.Http,
                    Description  = "Lütfen alana 'Bearer' kelimesini ve ardından bir boşluk ve JWT değerini girin.\r\n Örnek: \"Authorization: Bearer {token}\"",
                    Name         = "Authorization",
                    BearerFormat = "JWT",
                    Scheme       = "bearer"
                };
                options.AddSecurityDefinition("Bearer", securityScheme);
                var securityRequirement = new OpenApiSecurityRequirement {
                    { securityScheme, new string[] { } }
                };
                options.AddSecurityRequirement(securityRequirement);
            });

            return(services);
        }
示例#21
0
        public static IServiceCollection AddSwaggerDocumentation(this IServiceCollection services)
        {
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "PRMS API", Version = "v1"
                });

                var securityScheme = new OpenApiSecurityScheme
                {
                    Description = "Jwt Auth Bearer Scheme",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.Http,
                    Scheme      = "bearer",
                    Reference   = new OpenApiReference
                    {
                        Type = ReferenceType.SecurityScheme,
                        Id   = "Bearer"
                    }
                };

                c.AddSecurityDefinition("Bearer", securityScheme);
                var securityRequirement = new OpenApiSecurityRequirement
                {
                    {
                        securityScheme,
                        new[] { "Bearer" }
                    }
                };

                c.AddSecurityRequirement(securityRequirement);
            });

            return(services);
        }
示例#22
0
        private void AddSwagger(IServiceCollection services)
        {
            services.AddSwaggerGen(setup =>
            {
                // Include 'SecurityScheme' to use JWT Authentication
                var jwtSecurityScheme = new OpenApiSecurityScheme
                {
                    Scheme       = "bearer",
                    BearerFormat = "JWT",
                    Name         = "JWT Authentication",
                    In           = ParameterLocation.Header,
                    Type         = SecuritySchemeType.Http,
                    Description  = "JWT Bearer token",

                    Reference = new OpenApiReference
                    {
                        Id   = JwtBearerDefaults.AuthenticationScheme,
                        Type = ReferenceType.SecurityScheme
                    }
                };

                setup.AddSecurityDefinition(jwtSecurityScheme.Reference.Id, jwtSecurityScheme);

                setup.AddSecurityRequirement(new OpenApiSecurityRequirement
                {
                    { jwtSecurityScheme, Array.Empty <string>() }
                });

                setup.SwaggerDoc("v1", new OpenApiInfo
                {
                    Title       = "Prueba WEB api",
                    Version     = "v1",
                    Description = "Desarrollador:Armando Rodrigues"
                });
            });
        }
示例#23
0
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            var allAttributes = context.MethodInfo.DeclaringType.GetCustomAttributes(true)
                                .Union(context.MethodInfo.GetCustomAttributes(true));

            //过滤掉 AllowAnonymousAttribute
            if (!allAttributes.Any(x => x is AllowAnonymousAttribute))
            {
                var authAttributes = allAttributes.OfType <AuthorizeAttribute>().Distinct();

                if (authAttributes.Any())
                {
                    operation.Responses.Add("401", new OpenApiResponse {
                        Description = "Unauthorized"
                    });
                    operation.Responses.Add("403", new OpenApiResponse {
                        Description = "Forbidden"
                    });

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

                    operation.Security = new List <OpenApiSecurityRequirement>
                    {
                        new OpenApiSecurityRequirement
                        {
                            [oAuthScheme] = new string[] { "SA" }
                        }
                    };
                }
            }
        }
        public void Apply(Operation operation, OperationFilterContext context)
#endif
        {
            bool hasOperationAuthentication =
                context.MethodInfo
                .GetCustomAttributes(true)
                .OfType <SharedAccessKeyAuthenticationAttribute>()
                .Any();

            bool hasControllerAuthentication =
                context.MethodInfo.DeclaringType != null &&
                context.MethodInfo.DeclaringType
                .GetCustomAttributes(true)
                .OfType <SharedAccessKeyAuthenticationAttribute>()
                .Any();

            if (hasOperationAuthentication || hasControllerAuthentication)
            {
                if (operation.Responses.ContainsKey("401") == false)
                {
#if NETCOREAPP3_1
                    operation.Responses.Add("401", new OpenApiResponse {
                        Description = "Unauthorized"
                    });
#else
                    operation.Responses.Add("401", new Response {
                        Description = "Unauthorized"
                    });
#endif
                }

                if (operation.Responses.ContainsKey("403") == false)
                {
#if NETCOREAPP3_1
                    operation.Responses.Add("403", new OpenApiResponse {
                        Description = "Forbidden"
                    });
#else
                    operation.Responses.Add("403", new Response {
                        Description = "Forbidden"
                    });
#endif
                }
#if NETCOREAPP3_1
                var scheme = new OpenApiSecurityScheme
                {
                    Scheme = _securitySchemeName,
                    Type   = _securitySchemeType
                };

                operation.Security = new List <OpenApiSecurityRequirement>
                {
                    new OpenApiSecurityRequirement
                    {
                        [scheme] = new List <string>()
                    }
                };
#else
                operation.Security = new List <IDictionary <string, IEnumerable <string> > >
                {
                    new Dictionary <string, IEnumerable <string> > {
                        [_securitySchemeName] = Enumerable.Empty <string>()
                    }
                };
#endif
            }
        }
示例#25
0
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();

            services.AddTransient <LeagueLogic, LeagueLogic>();
            services.AddTransient <TeamLogic, TeamLogic>();
            services.AddTransient <PlayerLogic, PlayerLogic>();
            services.AddTransient <AuthLogic, AuthLogic>();

            services.AddTransient <IRepository <League>, LeagueRepo>();
            services.AddTransient <IRepository <Team>, TeamRepo>();
            services.AddTransient <IRepository <Player>, PlayerRepo>();

            //services.AddSwaggerGen();
            services.AddSwaggerGen(c =>
            {
                // configure SwaggerDoc and others

                // add JWT Authentication
                var securityScheme = new OpenApiSecurityScheme
                {
                    Name         = "JWT Authentication",
                    Description  = "Enter JWT Bearer token **_only_**",
                    In           = ParameterLocation.Header,
                    Type         = SecuritySchemeType.Http,
                    Scheme       = "bearer", // must be lower case
                    BearerFormat = "JWT",
                    Reference    = new OpenApiReference
                    {
                        Id   = JwtBearerDefaults.AuthenticationScheme,
                        Type = ReferenceType.SecurityScheme
                    }
                };
                c.AddSecurityDefinition(securityScheme.Reference.Id, securityScheme);
                c.AddSecurityRequirement(new OpenApiSecurityRequirement
                {
                    { securityScheme, new string[] { } }
                });
            });


            services.AddCors(options => { options.AddDefaultPolicy(builder => { builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod(); }); });


            services.AddDbContext <PlayersDbContext>();
            services.AddIdentity <IdentityUser, IdentityRole>(
                option =>
            {            //jelszo hazirend
                option.Password.RequireDigit           = false;
                option.Password.RequiredLength         = 6;
                option.Password.RequireNonAlphanumeric = false;
                option.Password.RequireUppercase       = false;
                option.Password.RequireLowercase       = false;
            }
                ).AddEntityFrameworkStores <PlayersDbContext>()
            .AddDefaultTokenProviders();


            services.AddAuthentication(option => {
                option.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                option.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
                option.DefaultScheme             = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(options => {
                options.SaveToken                 = true;
                options.RequireHttpsMetadata      = true;
                options.TokenValidationParameters = new TokenValidationParameters()
                {
                    ValidateIssuer   = true,
                    ValidateAudience = true,
                    ValidAudience    = "http://www.security.org",
                    ValidIssuer      = "http://www.security.org",
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("Paris Berlin Cairo Sydney Tokyo Beijing Rome London Athens"))
                };
            });
        }
示例#26
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();

            services.AddMvc(options =>
            {
                options.EnableEndpointRouting = false;
            });

            services.AddAuthorization(options =>
            {
                options.AddPolicy(AuthenticationConstants.ValidMatchPolicy, builder =>
                {
                    builder
                    .RequireAuthenticatedUser()
                    .AddAuthenticationSchemes(AuthenticationConstants.Scheme)
                    .RequireClaim(AuthenticationConstants.UserIdClaim)
                    .RequireClaim(AuthenticationConstants.MatchIdClaim);
                });
            });

            services.AddAuthentication(AuthenticationConstants.Scheme)
            .AddScheme <AuthenticationSchemeOptions, SimpleAuthenticationHandler>(AuthenticationConstants.Scheme, null);

            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "Game api", Version = "v1"
                });

                var scheme = new OpenApiSecurityScheme
                {
                    In          = ParameterLocation.Header,
                    Description = "Please enter token into the field as \"Bearer {token}\"",
                    Name        = "Authorization",
                    Type        = SecuritySchemeType.ApiKey,
                    Scheme      = "Bearer"
                };

                c.AddSecurityDefinition("Bearer", scheme);

                c.AddSecurityRequirement(new OpenApiSecurityRequirement
                {
                    {
                        new OpenApiSecurityScheme
                        {
                            Reference = new OpenApiReference
                            {
                                Type = ReferenceType.SecurityScheme,
                                Id   = "Bearer"
                            },
                            Scheme = "oauth2",
                            Name   = "Bearer",
                            In     = ParameterLocation.Header,
                        },
                        new string[] { }
                    }
                });

                c.DescribeAllEnumsAsStrings();
            });

            services.AddSignalR();

            services
            .AddScoped <IGameAuthenticationService, GameAuthenticationService>()
            .AddSingleton <ITokenService, TokenService>()
            .AddSingleton <IMatchService, MatchService>();
        }
        /// <inheritdoc />
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            if (operation == null)
            {
                throw new ArgumentNullException(nameof(operation));
            }
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            operation.OperationId = $"{context.MethodInfo.DeclaringType.Name}.{context.MethodInfo.Name}";

            var authAttributes = context
                                 .MethodInfo
                                 .DeclaringType
                                 .GetCustomAttributes(true)
                                 .Union(
                context
                .MethodInfo
                .GetCustomAttributes(true))
                                 .OfType <TgsAuthorizeAttribute>();

            if (authAttributes.Any())
            {
                var tokenScheme = new OpenApiSecurityScheme
                {
                    Reference = new OpenApiReference
                    {
                        Type = ReferenceType.SecurityScheme,
                        Id   = TokenSecuritySchemeId
                    }
                };

                operation.Security = new List <OpenApiSecurityRequirement>
                {
                    new OpenApiSecurityRequirement
                    {
                        {
                            tokenScheme,
                            new List <string>()
                        }
                    }
                };

                if (authAttributes.Any(attr => attr.RightsType.HasValue && RightsHelper.IsInstanceRight(attr.RightsType.Value)))
                {
                    operation.Parameters.Add(new OpenApiParameter
                    {
                        Reference = new OpenApiReference
                        {
                            Type = ReferenceType.Parameter,
                            Id   = ApiHeaders.InstanceIdHeader
                        }
                    });
                }
            }
            else
            {
                // HomeController.CreateToken
                var passwordScheme = new OpenApiSecurityScheme
                {
                    Reference = new OpenApiReference
                    {
                        Type = ReferenceType.SecurityScheme,
                        Id   = PasswordSecuritySchemeId
                    }
                };

                operation.Security = new List <OpenApiSecurityRequirement>
                {
                    new OpenApiSecurityRequirement
                    {
                        {
                            passwordScheme,
                            new List <string>()
                        }
                    }
                };
            }
        }
示例#28
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            #region Sesja
            services.AddDistributedMemoryCache();
            services.AddSession(options =>
            {
                options.IdleTimeout        = TimeSpan.FromSeconds(300);
                options.Cookie.HttpOnly    = true;
                options.Cookie.IsEssential = true;
            });
            #endregion Sesja

            //services.AddSingleton((container) =>
            //{
            //    var logger = container.GetRequiredService<ILogger>();
            //    return logger;
            //});

            services.AddIdentityCore <IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
            .AddEntityFrameworkStores <ApplicationDbContext>();

            services.AddScoped <IGroupRepository, GroupRepository>();
            services.AddScoped <IMailRepository, MailRepository>();
            services.AddScoped <IMailsService, MailsService>();
            services.AddScoped <IGroupsService, GroupsService>();

            services.AddHttpContextAccessor();

            services.AddDbContext <ApplicationDbContext>(options =>
            {
                options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
                //options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"), b => b.MigrationsAssembly("MailingGroups"));
                options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
                                     sqlServerOptionsAction: sqlOptions =>
                {
                    sqlOptions.EnableRetryOnFailure(
                        maxRetryCount: 10,
                        maxRetryDelay: TimeSpan.FromSeconds(30),
                        errorNumbersToAdd: null);
                });
            });

            services.AddAuthorization();

            services.AddControllers();

            #region identity
            services.AddIdentity <ApplicationUser, IdentityRole>(
                opts =>
            {
                opts.Password.RequireDigit           = true;
                opts.Password.RequireLowercase       = true;
                opts.Password.RequireUppercase       = true;
                opts.Password.RequireNonAlphanumeric = false;
                opts.Password.RequiredLength         = 7;
            })
            .AddEntityFrameworkStores <ApplicationDbContext>();

            services.AddAuthentication(opts =>
            {
                opts.DefaultScheme             = JwtBearerDefaults.AuthenticationScheme;
                opts.DefaultAuthenticateScheme =
                    JwtBearerDefaults.AuthenticationScheme;
                opts.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(cfg =>
            {
                cfg.RequireHttpsMetadata      = false;
                cfg.SaveToken                 = true;
                cfg.TokenValidationParameters = new TokenValidationParameters()
                {
                    // standard configuration
                    ValidIssuer      = Configuration["Auth:Jwt:Issuer"],
                    ValidAudience    = Configuration["Auth:Jwt:Audience"],
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Auth:Jwt:Key"])),
                    ClockSkew        = TimeSpan.Zero,
                    // security switches
                    RequireExpirationTime    = true,
                    ValidateIssuer           = true,
                    ValidateIssuerSigningKey = true,
                    ValidateAudience         = true
                };
            });
            #endregion

            services.AddSwaggerGen((options) =>
            {
                options.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "My API", Version = "v1"
                });

                var securityScheme = new OpenApiSecurityScheme
                {
                    Name         = "JWT Authentication",
                    Description  = "Enter JWT Bearer token **_only_**",
                    In           = ParameterLocation.Header,
                    Type         = SecuritySchemeType.Http,
                    Scheme       = "bearer", // must be lower case
                    BearerFormat = "JWT",
                    Reference    = new OpenApiReference
                    {
                        Id   = JwtBearerDefaults.AuthenticationScheme,
                        Type = ReferenceType.SecurityScheme
                    }
                };
                options.AddSecurityDefinition(securityScheme.Reference.Id, securityScheme);
                options.AddSecurityRequirement(new OpenApiSecurityRequirement
                {
                    { securityScheme, new string[] { } }
                });
            });
        }
示例#29
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "CWebService.Api", Version = "v1"
                });
                c.OperationFilter <UpdateFileDownloadOperations>();
            });

            services.AddDbContextPool <ApplicationContext>(options => getDefaultOptions(options));
            services.AddDbContextPool <BrandContext>(options => getDefaultOptions(options));
            services.AddDbContextPool <ModelContext>(options => getDefaultOptions(options));
            services.AddDbContextPool <VehicleContext>(options => getDefaultOptions(options));
            services.AddDbContextPool <BookingContext>(options => getDefaultOptions(options));

            services.AddSimpleInjector(container, options =>
            {
                options.AddAspNetCore()
                .AddControllerActivation();
            });

            container = new Composer(container).Build();

            services.AddAuthentication(option =>
            {
                option.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                option.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(option =>
            {
                option.RequireHttpsMetadata      = false;
                option.SaveToken                 = true;
                option.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("0dabbad70b774266a599b10fc1a98911")),
                    ValidateIssuer           = false,
                    ValidateAudience         = false
                };
            });

            services.AddSwaggerGen(setup =>
            {
                var jwtSecurityScheme = new OpenApiSecurityScheme
                {
                    Scheme       = "bearer",
                    BearerFormat = "JWT",
                    Name         = "JWT Authentication",
                    In           = ParameterLocation.Header,
                    Type         = SecuritySchemeType.Http,
                    Description  = "Put your JWT Bearer below!",

                    Reference = new OpenApiReference
                    {
                        Id   = JwtBearerDefaults.AuthenticationScheme,
                        Type = ReferenceType.SecurityScheme
                    }
                };

                setup.AddSecurityDefinition(jwtSecurityScheme.Reference.Id, jwtSecurityScheme);

                setup.AddSecurityRequirement(new OpenApiSecurityRequirement
                {
                    { jwtSecurityScheme, Array.Empty <string>() }
                });
            });
        }
示例#30
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            services.AddTransient <IOneVoteLogic>(x => new OneVoteLogic(Configuration["DBPassword"]));
            services.AddTransient <IAllVotesLogic>(x => new AllVotesLogic(Configuration["DBPassword"]));
            services.AddTransient <IRoleSwitchLogic>(x => new RoleSwitchLogic(Configuration["DBPassword"]));
            services.AddTransient <AuthLogic, AuthLogic>();
            services.AddSwaggerGen(c =>
            {
                // configure SwaggerDoc and others

                // add JWT Authentication
                var securityScheme = new OpenApiSecurityScheme
                {
                    Name         = "JWT Authentication",
                    Description  = "Enter JWT Bearer token **_only_**",
                    In           = ParameterLocation.Header,
                    Type         = SecuritySchemeType.Http,
                    Scheme       = "bearer", // must be lower case
                    BearerFormat = "JWT",
                    Reference    = new OpenApiReference
                    {
                        Id   = JwtBearerDefaults.AuthenticationScheme,
                        Type = ReferenceType.SecurityScheme
                    }
                };
                c.AddSecurityDefinition(securityScheme.Reference.Id, securityScheme);
                c.IncludeXmlComments(XmlCommentsFilePath);
                c.AddSecurityRequirement(new OpenApiSecurityRequirement
                {
                    { securityScheme, new string[] { } }
                });
            });
            var connectionString = "server=95.111.254.24;database=projektmunka;user=projektmunka;password="******"DBPassword"] + ";ApplicationIntent=ReadWrite;";

            services.AddDbContext <VotoeDbContext>(options => options.UseSqlServer(connectionString));
            services.AddIdentity <IdentityUser, IdentityRole>(
                option =>
            {
                option.Password.RequireDigit           = false;
                option.Password.RequiredLength         = 6;
                option.Password.RequireNonAlphanumeric = false;
                option.Password.RequireUppercase       = false;
                option.Password.RequireLowercase       = false;
            }
                ).AddEntityFrameworkStores <VotoeDbContext>()
            .AddDefaultTokenProviders();

            services.AddAuthentication(option => {
                option.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                option.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
                option.DefaultScheme             = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(options => {
                options.SaveToken                 = true;
                options.RequireHttpsMetadata      = true;
                options.TokenValidationParameters = new TokenValidationParameters()
                {
                    ValidateIssuer   = true,
                    ValidateAudience = true,
                    ValidAudience    = "http://www.security.org",
                    ValidIssuer      = "http://www.security.org",
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("abc 123 970608 qwertzuiop"))
                };
            });
            services.AddAuthorization(options =>
            {
                options.DefaultPolicy = new AuthorizationPolicyBuilder(JwtBearerDefaults.AuthenticationScheme)
                                        .RequireAuthenticatedUser()
                                        .Build();
            });

            services.AddCors(options =>
            {
                options.AddDefaultPolicy(
                    builder =>
                {
                    builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod();
                });
            });
        }