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(); }
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); }); }
// 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 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); }