예제 #1
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors();

            services.AddControllers();

            var tokenConfigurations = new TokenConfigurations();

            new ConfigureFromConfigurationOptions <TokenConfigurations>(Configuration.GetSection("TokenConfigurations")).Configure(tokenConfigurations);

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

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

            services.AddOptions();

            ApplicationDependencyInjection.RegisterServices(services, Configuration);

            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1",
                             new OpenApiInfo
                {
                    Title       = "API",
                    Version     = "v1",
                    Description = "TooSeguros",
                    Contact     = new OpenApiContact()
                    {
                        Name = "Fernando Camilo",
                        Url  = new Uri("https://www.linkedin.com/in/fernando-azevedo-camilo-51795b63/")
                    }
                });

                var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);

                c.IncludeXmlComments(xmlPath);

                c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
                {
                    Description = "Standard Authorization header using the Bearer scheme. Example: \"bearer {token}\"",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.ApiKey
                });

                c.OperationFilter <SecurityRequirementsOperationFilter>();
            });
        }
예제 #2
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext <APIContexto>(opt =>
                                                opt.UseMySql(Configuration.GetConnectionString("bancodados"))
                                                );

            /*
             * O método ConfigureServices da classe Startup também passará por ajustes:
             *
             * Uma referência de TokenConfigurations será criada a partir do objeto vinculado à
             * propriedade Configuration e do conteúdo definido na seção de mesmo nome no arquivo appsettings.json;
             * Instâncias dos tipos SigningConfigurations e TokenConfigurations serão
             * configuradas via método AddSingleton, de forma que uma única referência
             * das mesmas seja empregada durante todo o tempo em que a aplicação permanecer em
             * execução. Quanto a UsersDAO, o método AddTransient determina que referências
             * desta classe sejam geradas toda vez que uma dependência for encontrada;
             * Em seguida serão invocados os métodos AddAuthentication e AddJwtBearer. A chamada
             * a AddAuthentication especificará os schemas utilizados para a autenticação do tipo
             * Bearer. Já em AddJwtBearer serão definidas configurações como a chave e o algoritmo
             * de criptografia utilizados, a necessidade de analisar se um token ainda é válido e
             * o tempo de tolerância para expiração de um token (zero, no caso desta aplicação de testes);
             * A chamada ao método AddAuthorization ativará o uso de tokens com o intuito de autorizar
             * ou não o acesso a recursos da aplicação de testes.
             */
            var signingConfigurations = new SigningConfigurations();

            services.AddSingleton(signingConfigurations);

            var TokenConfigurations = new TokenConfigurations();

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

            services.AddAuthentication(authOptions => {
                authOptions.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                authOptions.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(bearerOptions => {
                var paramsValidation = bearerOptions.TokenValidationParameters;
                paramsValidation.IssuerSigningKey = signingConfigurations.Key;
                paramsValidation.ValidAudience    = TokenConfigurations.Audience;
                paramsValidation.ValidIssuer      = TokenConfigurations.Issuer;

                // Valida a assinatura de um token recebido
                paramsValidation.ValidateIssuerSigningKey = true;

                // Verifica a assinatura de um token recebido ainda é valido
                paramsValidation.ValidateLifetime = true;

                // Tempo de tolerância para a expiração de um token (utilizado
                // caso haja problemas de sincronismo de horário entre diferentes
                // computadores envolvidos no processo de comunicação)
                paramsValidation.ClockSkew = TimeSpan.Zero;
            });

            // Ativa o uso do token como forma de autorizar o acesso
            // a recursos desse projeto
            services.AddAuthorization(auth =>
            {
                auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder()
                               .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
                               .RequireAuthenticatedUser().Build());
            });

            services.AddMvc();
        }
예제 #3
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            /*
             * o método AddTransient determina que referências desta classe sejam geradas toda vez que uma dependência for encontrada
             */
            services.AddTransient <UsersDAO>();

            /*
             * SigningConfigurations configurado via método AddSingleton,
             * de forma que uma única referência das mesmas seja empregada durante todo o tempo em que a aplicação permanecer em execução.
             */
            var signingConfigurations = new SigningConfigurations();

            services.AddSingleton(signingConfigurations);

            /*
             * TokenConfigurations configurado via método AddSingleton,
             * de forma que uma única referência das mesmas seja empregada durante todo o tempo em que a aplicação permanecer em execução.
             */
            var tokenConfigurations = new TokenConfigurations();

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


            /*
             * AddAuthentication e AddJwtBearer.
             * AddAuthentication especificará os schemas utilizados para a autenticação do tipo Bearer.
             * AddJwtBearer serão definidas configurações como a chave e o algoritmo de criptografia utilizados,
             *  a necessidade de analisar se um token ainda é válido e o tempo de tolerância para expiração de um token (zero, no caso desta aplicação de testes);
             */
            services.AddAuthentication(authOptions =>
            {
                authOptions.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                authOptions.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(bearerOptions =>
            {
                var paramsValidation = bearerOptions.TokenValidationParameters;
                paramsValidation.IssuerSigningKey = signingConfigurations.Key;
                paramsValidation.ValidAudience    = tokenConfigurations.Audience;
                paramsValidation.ValidIssuer      = tokenConfigurations.Issuer;

                // Valida a assinatura de um token recebido
                paramsValidation.ValidateIssuerSigningKey = true;

                // Verifica se um token recebido ainda é válido
                paramsValidation.ValidateLifetime = true;

                // Tempo de tolerância para a expiração de um token (utilizado
                // caso haja problemas de sincronismo de horário entre diferentes
                // computadores envolvidos no processo de comunicação)
                paramsValidation.ClockSkew = TimeSpan.Zero;
            });

            /*
             * Ativa o uso do token como forma de autorizar o acessoa recursos deste projeto
             */
            services.AddAuthorization(auth =>
            {
                auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder()
                               .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
                               .RequireAuthenticatedUser().Build());
            });

            /*
             */
            services.AddMvc();
        }