/**
         * A solução criada para autenticação é fake, pois considera um usuário admin:admin estático.
         * A configuração de uma solução para autenticar um usuário em um bano de dados deve mapear a classe "UsuarioFake"
         * e adaptadar o médodo "UsuarioExiste". Além disso, é importante ressaltar que a solução em JWT,
         * incluindo a assinatura criptografada foi inspirada na proposta de
         * Renato Groffe (https://github.com/renatogroffe/ASPNETCore2_JWT)
         * **/
        public static void ConfigurarAutenticacao(this IServiceCollection services)
        {
            // Instanciando configurações de segurança (token e criptografia).
            ConfiguracoesDeSegurancaSingleton configuracoesDeSeguranca = ConfiguracoesDeSegurancaSingleton.getInstance();

            services.AddSingleton(configuracoesDeSeguranca);

            // Configurando autenticação JWT com Bearer.
            services.AddAuthentication(authOptions =>
            {
                authOptions.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                authOptions.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(bearerOptions =>
            {
                var paramsValidation = bearerOptions.TokenValidationParameters;
                paramsValidation.IssuerSigningKey         = configuracoesDeSeguranca.SecurityKey;
                paramsValidation.ValidAudience            = configuracoesDeSeguranca.TokenAudience;
                paramsValidation.ValidIssuer              = configuracoesDeSeguranca.TokenIssuer;
                paramsValidation.ValidateIssuerSigningKey = true;
                paramsValidation.ValidateLifetime         = true;
            });

            // Ativando verificação de token em requisições.
            services.AddAuthorization(autorizacao =>
            {
                autorizacao.AddPolicy("Bearer", new AuthorizationPolicyBuilder()
                                      .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
                                      .RequireAuthenticatedUser().Build());
            });
        }
Ejemplo n.º 2
0
        public Object Login(
            [FromBody] UsuarioFake usuario,
            [FromServices] ConfiguracoesDeSegurancaSingleton configuracoesDeSeguranca)
        {
            UsuarioFake usuarioFake;

            if (usuario == null ||
                String.IsNullOrWhiteSpace(usuario.Nome) ||
                String.IsNullOrWhiteSpace(usuario.Senha))
            {
                return(enviarBadRequest());
            }

            usuarioFake = UsuarioFake.UsuarioExiste(usuario);

            if (usuarioFake == null)
            {
                return(enviarUnauthorized());
            }

            // Fachada que implementa a geração de tokens com base nas configurações de segurança e no usuário logado.
            return(new
            {
                token = TokenFacade.GerarToken(configuracoesDeSeguranca, usuario)
            });
        }