Пример #1
0
        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"
                }));
            }
        }
Пример #2
0
        // 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();
        }