public IActionResult Login( [FromBody] AutenticacaoRequest autenticacaoRequest, [FromServices] IAutenticacaoServico autenticacaoServico, [FromServices] ConfigsAssinatura configsAssinatura, [FromServices] ConfigsToken configsToken) { bool credenciaisValidas = autenticacaoServico.Autenticar(autenticacaoRequest); if (credenciaisValidas) { ClaimsIdentity identity = new ClaimsIdentity( new GenericIdentity(autenticacaoRequest.Login, "Login"), new[] { new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString("N")), new Claim(JwtRegisteredClaimNames.UniqueName, autenticacaoRequest.Login) } ); DateTime dataCriacao = DateTime.Now; DateTime dataExpiracao = dataCriacao + TimeSpan.FromSeconds(configsToken.Seconds); var handler = new JwtSecurityTokenHandler(); var securityToken = handler.CreateToken(new SecurityTokenDescriptor { Issuer = configsToken.Issuer, Audience = configsToken.Audience, SigningCredentials = configsAssinatura.SigningCredentials, Subject = identity, NotBefore = dataCriacao, Expires = dataExpiracao }); var token = handler.WriteToken(securityToken); return(Ok(new AutenticacaoResponse { CriadoEm = dataCriacao, ExpiradoEm = dataExpiracao, Token = token })); } else { return(Ok(new Falha { Titulo = "", Erros = "Falha ao autenticar" })); } }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddDbContext <EstacionamentoContexto>(options => options.UseSqlServer(Config.GetConnectionString("Conexao"))); var configsAssinatura = new ConfigsAssinatura(); services.AddSingleton(configsAssinatura); services.AddCustomSwagger(Config); var configsToken = new ConfigsToken(); new ConfigureFromConfigurationOptions <ConfigsToken>( Config.GetSection("ConfigsToken")) .Configure(configsToken); services.AddSingleton(configsToken); services.AddAuthentication(authOptions => { authOptions.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; authOptions.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(bearerOptions => { var paramsValidation = bearerOptions.TokenValidationParameters; paramsValidation.IssuerSigningKey = configsAssinatura.ChaveSeguranca; paramsValidation.ValidAudience = configsToken.Audience; paramsValidation.ValidIssuer = configsToken.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 acesso // a recursos deste projeto services.AddAuthorization(auth => { auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder() .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme) .RequireAuthenticatedUser().Build()); }); services.AddTransient <IAutenticacaoServico, AutenticacaoServico>(); services.AddTransient <IUsuarioServico, UsuarioServico>(); services.AddTransient <IClienteServico, ClienteServico>(); services.AddTransient <IEmpresaServico, EmpresaServico>(); services.AddTransient <IFormaRecebimentoServico, FormaRecebimentoServico>(); services.AddTransient <IMovimentacaoServico, MovimentacaoServico>(); services.AddTransient <IRecebimentoServico, RecebimentoServico>(); services.AddTransient <IVeiculoServico, VeiculoServico>(); services.AddCors(options => { options.AddPolicy("CorsPolicy", builder => builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials()); }); services.AddMvc(); }