public Uteis.Retornos.Validacao.Resultado <AutenticacaoUsuario, Uteis.Retornos.Validacao.Falha> Autenticar(int codigo, string senha)
        {
            var senhaBase64 = Base64.ParaBase64(senha);
            var usuario     = _usuarioServico.ValidarUsuario(codigo, senhaBase64);

            if (!usuario.EstaValido)
            {
                return(new Uteis.Retornos.Validacao.Falha("Codigo ou senha incorretos"));
            }

            usuario.Sucesso.Senha = senha;

            var claim = new ClaimsIdentity(new Claim[]
            {
                new Claim(ClaimTypes.Name, usuario.Sucesso.Id.ToString())
            });

            var tokenHandler    = new JwtSecurityTokenHandler();
            var key             = Encoding.ASCII.GetBytes(_configuracoes.ChaveSecreta);
            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject            = claim,
                Expires            = DateTime.UtcNow.AddMinutes(5),
                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
            };
            var token = tokenHandler.CreateToken(tokenDescriptor);

            AutenticacaoUsuario autenticacao = new AutenticacaoUsuario();

            autenticacao.Usuario = usuario.Sucesso;
            autenticacao.Token   = tokenHandler.WriteToken(token);


            return(autenticacao);
        }
示例#2
0
        private async void BtnEntrar_OnClicked(object sender, EventArgs e)
        {
            ActIndicator.IsVisible = true;

            #region Validação de Campos
            if (string.IsNullOrEmpty(TxtEmail.Text))
            {
                await DisplayAlert("Put's, faltou algo! :O", "O campo EMAIL é obrigatório!", "Ok");

                ActIndicator.IsVisible = false;
                return;
            }

            if (string.IsNullOrEmpty(TxtSenha.Text))
            {
                await DisplayAlert("Put's, faltou algo! :O", "O campo SENHA é obrigatório!", "Ok");

                ActIndicator.IsVisible = false;
                return;
            }
            #endregion

            var parametros = new Login
            {
                email = _email,
                senha = _senha
            };

            if (await AutenticacaoUsuario.AutenticarUsuario(parametros))
            {
                await Navigation.PushAsync(new MasterPageView());
            }

            ActIndicator.IsVisible = false;
        }
示例#3
0
        public Retorno <AutenticacaoUsuario, Falha> Autenticar([FromBody] AutenticacaoUsuario autenticacao)
        {
            /*Esse código comentado seria util caso o token precisasse ser validado*/
            //var token = autenticacao.Token;
            //var tokHandler = new JwtSecurityTokenHandler();
            //if (token != string.Empty && tokHandler.CanReadToken(token)) //token formatado adequadamente?
            //{
            //    var jwtTokenLido = tokHandler.ReadJwtToken(token); //deserializa o token
            //    if (jwtTokenLido.ValidTo.CompareTo(DateTime.UtcNow) > 0) // ainda não expirou
            //    {
            //        var jwtTokenLidoClaimsCount = jwtTokenLido.Claims.Where(x => x.Value == autenticacao.Usuario.Id.ToString()).Count(); //conta quantos claims vindos do token possuem o Id do usuário passado

            //        if (jwtTokenLidoClaimsCount > 0)
            //        {
            //            return FormataRetorno(autenticacao); //retorna o mesmo token que ainda está válido
            //        }
            //    }
            //}

            //caso o token passado não seja válido, ou não esteja presente, gera um novo token com o usuário e senha passados
            var login = _loginServico.Autenticar(autenticacao.Usuario.Codigo, autenticacao.Usuario.Senha);

            if (!login.EstaValido)
            {
                return(FormataRetorno(autenticacao, "Codigo ou senha incorretos"));
            }

            return(FormataRetorno(login.Sucesso));
        }
示例#4
0
        private void BtnEsqueciSenha_OnClicked(object sender, EventArgs e)
        {
            ActIndicator.IsVisible = true;

            AutenticacaoUsuario.GerarNovaSenha(TxtEmail.Text);

            ActIndicator.IsVisible = false;
        }
示例#5
0
        public ActionResult Entrar(UsuarioViewModel usuarioViewModel)
        {
            AutenticacaoUsuario usuarioParaAutenticar = new AutenticacaoUsuario();

            usuarioParaAutenticar.Usuario = AutoMapper.Mapper.Map <Usuario>(usuarioViewModel);

            UsuarioService usuarioService    = new UsuarioService();
            var            usuarioCadastrado = usuarioService.Autenticar(usuarioParaAutenticar);

            if (!usuarioCadastrado.EstaValido)
            {
                ModelState.AddModelError("", "Senha ou código(s) incorreto(s)."); //ou algum outro problema, investigar
                return(View("Index"));
            }
            else
            {
                Session[Login.ChaveUsuarioSession] = usuarioCadastrado.Sucesso; // pra poder gerar o token

                var professorUsuario = new ProfessorService().ObterPeloIdUsuario(usuarioCadastrado.Sucesso.Usuario.Id);
                //if (true) { }
                if (professorUsuario.Sucesso == null && !professorUsuario.EstaValido)
                {
                    var alunoUsuario = new AlunoService().ObterPeloIdUsuario(usuarioCadastrado.Sucesso.Usuario.Id);
                    if (alunoUsuario.Sucesso == null && !alunoUsuario.EstaValido)
                    {
                        ModelState.AddModelError("", "Erro interno. O código do usuário está cadastrado mas não existe nenhum professor ou aluno com este código.");
                        return(View("Index"));
                    }
                    else
                    {
                        alunoUsuario.Sucesso.Codigo = usuarioCadastrado.Sucesso.Usuario.Codigo;
                        alunoUsuario.Sucesso.Senha  = usuarioCadastrado.Sucesso.Usuario.Senha;

                        var autenticacaoAluno = new AutenticacaoAluno(alunoUsuario.Sucesso, usuarioCadastrado.Sucesso.Token);

                        Session[Login.ChaveUsuarioSession] = autenticacaoAluno;
                        return(RedirectToAction("Index", "Home"));
                    }
                }
                else
                {
                    professorUsuario.Sucesso.Codigo = usuarioCadastrado.Sucesso.Usuario.Codigo;
                    professorUsuario.Sucesso.Senha  = usuarioCadastrado.Sucesso.Usuario.Senha;

                    var autenticacaoProfessor = new AutenticacaoProfessor(professorUsuario.Sucesso, usuarioCadastrado.Sucesso.Token);

                    Session[Login.ChaveUsuarioSession] = autenticacaoProfessor;
                    return(RedirectToAction("Index", "Home"));
                }
            }
        }
示例#6
0
        public Helpers.Retornos.Validacao.Resultado <AutenticacaoUsuario, Helpers.Retornos.Validacao.Falha> Autenticar(AutenticacaoUsuario autenticacaoUsuario)
        {
            /*O ERRO que ta acontecendo aqui é por que na primeira vez a senha vem decidoficada e a segunda vez não, preciso
             * descobrir onde seria a melhor parte pra decodificar a senha*/

            if (autenticacaoUsuario == null)
            {
                return(new Helpers.Retornos.Validacao.Falha("Informe um usuário para autenticar"));
            }
            var response = JsonConvert.DeserializeObject <Retorno <AutenticacaoUsuario, Falha> >(RequisitarAPI("login/autenticar", RestSharp.Method.POST, autenticacaoUsuario).Content);

            if (response.Falha == null)
            {
                return(response.Sucesso.Objeto);
            }
            return(new Helpers.Retornos.Validacao.Falha(response.Falha.Mensagem));
        }