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