Esempio n. 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();
        }
Esempio n. 2
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>();
        }
        public void InstallServices(IServiceCollection services, IConfiguration configuration)
        {
            services.AddMvc(options =>
            {
                options.EnableEndpointRouting = false;
            }).SetCompatibilityVersion(CompatibilityVersion.Version_3_0);

            services.AddSwaggerGen(x =>
            {
                x.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo()
                {
                    Version     = "v1",
                    Title       = "Payment Gateway API Documentation",
                    Description = "This documemtation provides the information about the Payment" +
                                  " Gateway API",
                });

                var openApiSecurityScheme = new Microsoft.OpenApi.Models.OpenApiSecurityScheme()
                {
                    Description = "JWT Authorization header using the bearer scheme",
                    Name        = "Authorization",
                    In          = Microsoft.OpenApi.Models.ParameterLocation.Header,
                    Type        = Microsoft.OpenApi.Models.SecuritySchemeType.ApiKey
                };


                x.AddSecurityDefinition("Bearer", openApiSecurityScheme);

                x.AddSecurityRequirement(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[0] }
                });
            });


            var jwtSettings = new JwtSettings();

            configuration.Bind(nameof(jwtSettings), jwtSettings);
            services.AddSingleton(jwtSettings);

            services.AddAuthentication(x =>
            {
                x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                x.DefaultScheme             = JwtBearerDefaults.AuthenticationScheme;
                x.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(x =>
            {
                x.SaveToken = true;
                x.TokenValidationParameters = new TokenValidationParameters()
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(jwtSettings.Secret)),
                    ValidateIssuer           = false,
                    ValidateAudience         = false,
                    RequireExpirationTime    = false,
                    ValidateLifetime         = true
                };
            });

            services.AddScoped <IIdentityService, IdentityService>();
        }
Esempio n. 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);
        }