示例#1
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext <DatabaseContext>(options => options.UseSqlServer(DatabaseContext.GetDatabaseStringConnection(configuration)));
            services.AddScoped <DatabaseContext>();

            services.AddMvc(options =>
            {
                options.EnableEndpointRouting = false;
            }).AddNewtonsoftJson(x => x.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);

            services.AddCors(options =>
            {
                options.AddPolicy("AllowSpecificOrigin",
                                  item => item
                                  .AllowAnyOrigin()
                                  .AllowAnyMethod()
                                  .AllowAnyHeader());
            });

            services.AddSwaggerGen(swg =>
            {
                swg.IncludeXmlComments(Path.ChangeExtension(Assembly.GetAssembly(typeof(Startup)) !.Location, "xml"));
                swg.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo
                {
                    Title       = "GPD",
                    Version     = "1.0",
                    Description = "Gerenciamento pelas diretrizes"
                });

                var scheme = new Microsoft.OpenApi.Models.OpenApiSecurityScheme
                {
                    Description = "Insira um token para autenticar as requisições na api. Exemplo: \"Bearer {token}\"",
                    Name        = "Authorization",
                    In          = Microsoft.OpenApi.Models.ParameterLocation.Header,
                    Type        = Microsoft.OpenApi.Models.SecuritySchemeType.ApiKey
                };

                swg.AddSecurityDefinition("Bearer", scheme);
                var requirement = new Microsoft.OpenApi.Models.OpenApiSecurityRequirement
                {
                    { scheme, new List <string>() }
                };
                swg.AddSecurityRequirement(requirement);
            });

            services.AddTransient <IHttpContextAccessor, HttpContextAccessor>();
            Services.LoadRepositories(services, typeof(DatabaseContext).Assembly);
            services.AddSingleton(new EnvironmentService(configuration));
            services.AddBusinessServices();
        }
示例#2
0
        public static void AddSwaggerService(this IServiceCollection services)
        {
            // Register the Swagger generator, defining 1 or more Swagger documents
            services.AddSwaggerGen(options =>
            {
                options.SwaggerDoc(name: "v1", new Microsoft.OpenApi.Models.OpenApiInfo {
                    Title = "BookStore API", Version = "v1"
                });
                // get xml comments path
                var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);

                // set xml path
                options.IncludeXmlComments(xmlPath);

                // set API key
                options.AddSecurityDefinition("ApiKey", new Microsoft.OpenApi.Models.OpenApiSecurityScheme()
                {
                    In          = Microsoft.OpenApi.Models.ParameterLocation.Header,
                    Description = "Please enter your ApiKey",
                    Name        = "ApiKey",
                    Type        = Microsoft.OpenApi.Models.SecuritySchemeType.ApiKey,
                    Scheme      = "ApiKey"
                });
                var secReq = new Microsoft.OpenApi.Models.OpenApiSecurityRequirement();
                secReq.Add(new Microsoft.OpenApi.Models.OpenApiSecurityScheme()
                {
                    Reference = new Microsoft.OpenApi.Models.OpenApiReference()
                    {
                        Type = Microsoft.OpenApi.Models.ReferenceType.SecurityScheme,
                        Id   = "ApiKey"
                    },
                    Name   = "ApiKey",
                    In     = Microsoft.OpenApi.Models.ParameterLocation.Header,
                    Scheme = "ApiKey"
                }, new List <string>());
                options.AddSecurityRequirement(secReq);
            });
        }
示例#3
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.AddDbContext <Models.ApplicationDbContext>(options => options.UseMySQL(Configuration.GetConnectionString("AppDb")));
            services.AddDbContext <Models.ApplicationUserDbContext>(options => options.UseMySQL(Configuration.GetConnectionString("AppUserDb")));
            services.AddApiVersioning(
                options =>
            {
                options.ReportApiVersions = true;
                options.AssumeDefaultVersionWhenUnspecified = true;
                options.DefaultApiVersion = new Microsoft.AspNetCore.Mvc.ApiVersion(1, 0);
            });

            services.AddSwaggerGen(options =>
            {
                //options.SwaggerDoc("v2.0", new Microsoft.OpenApi.Models.OpenApiInfo { Version = "v2.0", Title = "My API V2" });
                options.SwaggerDoc("v1.0", new Microsoft.OpenApi.Models.OpenApiInfo {
                    Version = "v1.0", Title = "My API V1"
                });


                options.DocInclusionPredicate((docName, apiDesc) =>
                {
                    var versions = apiDesc.CustomAttributes()
                                   .OfType <ApiVersionAttribute>()
                                   .SelectMany(attr => attr.Versions);

                    return(versions.Any(v => $"v{v}" == docName));
                });

                options.OperationFilter <RemoveVersionParameterOperationFilter>();
                options.DocumentFilter <SetVersionInPathDocumentFilter>();


                var scheme = new Microsoft.OpenApi.Models.OpenApiSecurityScheme
                {
                    Name         = "Authorization",
                    Type         = Microsoft.OpenApi.Models.SecuritySchemeType.ApiKey,
                    Scheme       = "Bearer",
                    BearerFormat = "JWT",
                    In           = Microsoft.OpenApi.Models.ParameterLocation.Header,
                    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\"",
                };

                options.AddSecurityDefinition("Bearer", scheme);

                var requirement = new Microsoft.OpenApi.Models.OpenApiSecurityRequirement()
                {
                    {
                        new Microsoft.OpenApi.Models.OpenApiSecurityScheme()
                        {
                            Reference = new Microsoft.OpenApi.Models.OpenApiReference {
                                Type = Microsoft.OpenApi.Models.ReferenceType.SecurityScheme,
                                Id   = "Bearer"
                            }
                        },
                        new string[] { }
                    }
                };

                options.AddSecurityRequirement(requirement);
            });

            services.AddIdentity <IdentityUser, IdentityRole>(
                config =>
            {
                config.SignIn.RequireConfirmedEmail = true;
                config.User.RequireUniqueEmail      = true;
            }).AddEntityFrameworkStores <Models.ApplicationUserDbContext>().AddDefaultTokenProviders();


            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultScheme             = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(option =>
            {
                option.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidIssuer      = Configuration["Jwt:Issuer"],
                    ValidAudience    = Configuration["Jwt:Audience"],
                    IssuerSigningKey = new SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
                };
            });


            services.AddAuthorization(options =>
            {
                options.AddPolicy("SuperUserRoleOnly", policy =>
                                  policy.Requirements.Add(new Auth.RoleRequirement(new string[] { "superuser" })));
            });


            services.AddScoped <IAuthorizationHandler, Auth.AuthorizationBaseOnRolesHandler>();
        }
示例#4
0
        public void ConfigureServices(IServiceCollection services)
        {
            var securityKey = Encoding.ASCII.GetBytes(Settings.SecretKey);

            services
            .AddMvc()
            .AddNewtonsoftJson(o =>
            {
                o.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
                o.SerializerSettings.ContractResolver      = new DefaultContractResolver()
                {
                    NamingStrategy = new CamelCaseNamingStrategy()
                };
                o.SerializerSettings.DateFormatString = "dd/MM/yyyy";
            });

            services.AddApiVersioning(o =>
            {
                o.AssumeDefaultVersionWhenUnspecified = true;
            });

            services.AddRouting(o => o.LowercaseUrls = true);

            services.AddCors(o => o.AddPolicy("CorsPolicy", builder =>
            {
                builder
                .AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader()
                .WithExposedHeaders("*");
            }));

            services.AddControllers();
            services.AddDistributedMemoryCache();

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

            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1",
                             new Microsoft.OpenApi.Models.OpenApiInfo
                {
                    Title       = "UserCRUDApiApi",
                    Version     = "v1",
                    Description = "API de Usuários",
                    Contact     = new Microsoft.OpenApi.Models.OpenApiContact
                    {
                        Name = "UserCRUDApiApi",
                        Url  = new System.Uri("https://github.com/fercice/UserCRUDApiApi")
                    }
                }
                             );

                // Bearer token authentication
                Microsoft.OpenApi.Models.OpenApiSecurityScheme securityDefinition = new Microsoft.OpenApi.Models.OpenApiSecurityScheme()
                {
                    Name         = "Bearer",
                    BearerFormat = "JWT",
                    Scheme       = "bearer",
                    Description  = "Specify the authorization token.",
                    In           = Microsoft.OpenApi.Models.ParameterLocation.Header,
                    Type         = Microsoft.OpenApi.Models.SecuritySchemeType.Http,
                };
                c.AddSecurityDefinition("Bearer", securityDefinition);

                // Make sure swagger UI requires a Bearer token specified
                Microsoft.OpenApi.Models.OpenApiSecurityScheme securityScheme = new Microsoft.OpenApi.Models.OpenApiSecurityScheme()
                {
                    Reference = new Microsoft.OpenApi.Models.OpenApiReference()
                    {
                        Id   = "Bearer",
                        Type = Microsoft.OpenApi.Models.ReferenceType.SecurityScheme
                    }
                };

                Microsoft.OpenApi.Models.OpenApiSecurityRequirement securityRequirements = new Microsoft.OpenApi.Models.OpenApiSecurityRequirement()
                {
                    { securityScheme, new string[] { } },
                };
                c.AddSecurityRequirement(securityRequirements);

                var filePath = Path.Combine(System.AppContext.BaseDirectory, "UserCRUDApi.xml");
                c.IncludeXmlComments(filePath);
            });

            // AddAutoMapper
            services.AddAutoMapperSetup();

            // .NET Native DI Abstraction
            RegisterServices(services);
        }