示例#1
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.RegisterInterface();
            services.AddAutoMapper(typeof(CoreProfile));
            ConfigureRepository.ConfigureDepedenciesRepository(services);

            services.AddControllers().AddFluentValidation(fvc => fvc.RegisterValidatorsFromAssemblyContaining <Startup>());

            var singinConfigurations = new SignInConfigurations();

            services.AddSingleton(singinConfigurations);

            var tokenConfiguration = new TokenConfigurations();

            new ConfigureFromConfigurationOptions <TokenConfigurations>(
                Configuration.GetSection("TokenConfigurations")).Configure(tokenConfiguration);
            services.AddSingleton(tokenConfiguration);

            services.AddAuthentication(authOp =>
            {
                authOp.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                authOp.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(bearerOp =>
            {
                var paramsValidation = bearerOp.TokenValidationParameters;
                paramsValidation.IssuerSigningKey         = singinConfigurations.Key;
                paramsValidation.ValidAudience            = tokenConfiguration.Audience;
                paramsValidation.ValidIssuer              = tokenConfiguration.Isseur;
                paramsValidation.ValidateIssuerSigningKey = true;
                paramsValidation.ValidateLifetime         = true;
                paramsValidation.ClockSkew = TimeSpan.Zero;
            });

            services.AddAuthorization(authOp =>
            {
                authOp.AddPolicy("Bearer", new AuthorizationPolicyBuilder()
                                 .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
                                 .RequireAuthenticatedUser().Build());
            });


            services.AddSwaggerGen(s =>
            {
                s.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo
                {
                    Version     = "v1",
                    Title       = "Teste Luby",
                    Description = "Projeto desenvolvido com arquitetura DDD.",
                    Contact     = new Microsoft.OpenApi.Models.OpenApiContact
                    {
                        Name  = "Ronaldo Bruno de Souza Santos",
                        Email = "*****@*****.**"
                    }
                });

                var xmlApiPath          = Path.Combine(AppContext.BaseDirectory, $"{typeof(Startup).Assembly.GetName().Name}.xml");
                var xmlDataContractPath = Path.Combine(AppContext.BaseDirectory, $"{typeof(BaseReponse).Assembly.GetName().Name}.xml");

                s.IncludeXmlComments(xmlApiPath);
                s.IncludeXmlComments(xmlDataContractPath);

                s.AddSecurityDefinition("Bearer", new Microsoft.OpenApi.Models.OpenApiSecurityScheme
                {
                    Description = "Enter the token",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.ApiKey
                });

                s.AddSecurityRequirement(new OpenApiSecurityRequirement
                {
                    {
                        new OpenApiSecurityScheme
                        {
                            Reference = new OpenApiReference
                            {
                                Id   = "Bearer",
                                Type = ReferenceType.SecurityScheme
                            }
                        }, new List <string>()
                    }
                });
            });
        }