public LoginBusinessImpl(IUserRepository repository, SigningConfigutaions signingConfigurations, TokenConfigurations tokenConfiguration) { _repository = repository; _signingConfigurations = signingConfigurations; _tokenConfiguration = tokenConfiguration; }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { var connectionString = _configuration["MySqlConnection:MySqlConnectionString"]; services.AddDbContext <MySQLContext>(options => options.UseMySql(connectionString)); //Execução EVOLVE ExecutingMigrations(connectionString); //Configurações de AUTENTICAÇÃO var signingConfigurations = new SigningConfigutaions(); services.AddSingleton(signingConfigurations); var tokenConfiguration = new TokenConfigurations(); //Faz leitura no arquivo appsettings.json as configurações da sessão new ConfigureFromConfigurationOptions <TokenConfigurations>( _configuration.GetSection("TokenConfigurations") ).Configure(tokenConfiguration); services.AddSingleton(tokenConfiguration); //Configurações da Autenticação usando Bearer services.AddAuthentication(authOpt => { authOpt.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; authOpt.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(bearerOpt => { var paramsValidation = bearerOpt.TokenValidationParameters; paramsValidation.IssuerSigningKey = signingConfigurations.Key; paramsValidation.ValidAudience = tokenConfiguration.Audience; paramsValidation.ValidIssuer = tokenConfiguration.Issuer; paramsValidation.ValidateIssuerSigningKey = true; paramsValidation.ValidateLifetime = true; paramsValidation.ClockSkew = TimeSpan.Zero; //Janela de tolerância do token }); //Configurações de Autorização do tipo Bearer sempre requerindo o bearer services.AddAuthorization(auth => { auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder() .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme) .RequireAuthenticatedUser().Build()); }); services.AddMvc(opt => { opt.RespectBrowserAcceptHeader = true; opt.FormatterMappings.SetMediaTypeMappingForFormat("xml", MediaTypeHeaderValue.Parse("text/xml")); opt.FormatterMappings.SetMediaTypeMappingForFormat("json", MediaTypeHeaderValue.Parse("application/json")); }) .AddXmlSerializerFormatters(); var filterOptions = new HyperMediaFilterOptions(); filterOptions.ObjectContentResponseEnricherList.Add(new PersonEnricher()); filterOptions.ObjectContentResponseEnricherList.Add(new BookEnricher()); services.AddSingleton(filterOptions); services.AddApiVersioning(); var swaggerDocInfo = new Info() { Title = "RESTFull API com ASP.NET Core 2.0", Version = "v1" }; services.AddSwaggerGen(s => s.SwaggerDoc("v1", swaggerDocInfo)); services.AddScoped <IPersonBusiness, PersonBusinessImpl>(); services.AddScoped <IBookBusiness, BookBusinessImpl>(); services.AddScoped <ILoginBusiness, LoginBusinessImpl>(); services.AddScoped <IFileBusiness, FileBusinessImpl>(); services.AddScoped <IUserRepository, UserRepositoryImpl>(); services.AddScoped <IPersonRepository, PersonRepositoryImpl>(); services.AddScoped(typeof(IRepository <>), typeof(GenericRepository <>)); }