コード例 #1
0
        private string CriaToken(UsuarioLogadoMySqlViewModel user)
        {
            List <Claim> claims = new List <Claim>();

            claims.Add(new Claim(JwtRegisteredClaimNames.Sub, user.Nome));
            claims.Add(new Claim("IdOrganizacao", user.IdOrganizacao.ToString()));
            claims.Add(new Claim(JwtRegisteredClaimNames.Email, user.Email));
            claims.Add(new Claim(JwtRegisteredClaimNames.Birthdate, user.DataCriacao.ToString("yyyy-MM-dd")));
            claims.Add(new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()));

            switch (user.RoleEnum)
            {
            case OrganizacaoUsuarioRoleEnum.GoobeeAdmin:
                claims.Add(new Claim(ClaimTypes.Role, RolesNomes.GoobeeAdmin));
                claims.Add(new Claim("RoleEnum", user.RoleEnum.ToString()));
                break;

            case OrganizacaoUsuarioRoleEnum.OrganizationAdmin:
                claims.Add(new Claim(ClaimTypes.Role, RolesNomes.OrganizationAdmin));
                claims.Add(new Claim("RoleEnum", user.RoleEnum.ToString()));
                break;

            case OrganizacaoUsuarioRoleEnum.AgileCoach:
                claims.Add(new Claim(ClaimTypes.Role, RolesNomes.AgileCoach));
                claims.Add(new Claim("RoleEnum", user.RoleEnum.ToString()));
                break;

            case OrganizacaoUsuarioRoleEnum.TeamLeader:
                claims.Add(new Claim(ClaimTypes.Role, RolesNomes.TeamLeader));
                claims.Add(new Claim("RoleEnum", user.RoleEnum.ToString()));
                break;

            default:
                claims.Add(new Claim(ClaimTypes.Role, RolesNomes.TeamMember));
                claims.Add(new Claim("RoleEnum", user.RoleEnum.ToString()));
                break;
            }

            var key   = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Jwt:Key"]));
            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

            var token = new JwtSecurityToken(
                _config["Jwt:Issuer"],
                _config["Jwt:Issuer"],
                claims,
                expires: DateTime.Now.AddMinutes(600), //60 min expiry and a client monitor token quality and should request new token with this one expiries
                signingCredentials: creds);

            return(new JwtSecurityTokenHandler().WriteToken(token));
        }
コード例 #2
0
        public async Task <IActionResult> LoginComGoogle([FromBody] UsuarioSocialMySqlViewModel usuario)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            UsuarioLogadoMySqlViewModel usuarioLogado = await _loginMySqlService.AutenticaComGoogle(usuario);

            if (usuarioLogado != null)
            {
                return(Ok(usuarioLogado));
            }

            return(Unauthorized());
        }
コード例 #3
0
        private async Task <bool> ValidaTokenGoogle(string idToken, UsuarioLogadoMySqlViewModel obj = null)
        {
            try
            {
                ValidationSettings validation = new ValidationSettings()
                {
                    ForceGoogleCertRefresh = true,
                    Audience = null,
                    IssuedAtClockTolerance       = TimeSpan.FromMinutes(5),
                    ExpirationTimeClockTolerance = TimeSpan.FromMinutes(5)
                };

                var resposta = await GoogleJsonWebSignature.ValidateAsync(idToken, validation);

                if (resposta == null)
                {
                    return(false);
                }
                else
                {
                    if (obj != null)
                    {
                        if (resposta.Email != obj.Email)
                        {
                            return(false);
                        }
                    }
                }
            }
            catch (InvalidJwtException error)
            {
                return(false);
            }
            catch (Exception error)
            {
                return(false);
            }

            return(true);
        }
コード例 #4
0
        public async Task <IActionResult> Login([FromBody] LoginMySql login)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest());
                }

                UsuarioLogadoMySqlViewModel usuario = await _loginMySqlService.Autentica(login);

                if (usuario == null)
                {
                    return(Unauthorized());
                }

                return(Ok(usuario));
            }
            catch (Exception e)
            {
                return(StatusCode(500, e.Message));
            }
        }
コード例 #5
0
        public async Task <UsuarioLogadoMySqlViewModel> Autentica(LoginMySql login)
        {
            UsuarioLogadoMySqlViewModel usuarioLogado = null;

            if (login != null)
            {
                UsuarioViewModel usuario = VerificaLoginSenha(login);
                if (usuario == null)
                {
                    return(usuarioLogado);
                }

                IEnumerable <OrganizacaoUsuarioMySql> organizacoes = await _organizacaoMySqlRepository.ListarOrganizacoesUsuarioEmail(usuario.Login);

                OrganizacaoUsuarioMySql organizacaoUsuario = null;

                if (organizacoes.Any(x => x.UltimaAcessada))
                {
                    organizacaoUsuario = organizacoes?.FirstOrDefault(x => x.UsuarioPlataforma && x.UltimaAcessada);
                }
                else
                {
                    organizacaoUsuario = organizacoes?.FirstOrDefault(x => x.UsuarioPlataforma);
                }

                PessoaMySql pessoa = await _pessoaMySqlRepository.BuscarPorEmail(usuario.Login);

                if (!usuario.Ativo)
                {
                    return(usuarioLogado);
                }

                if (pessoa != null && !pessoa.GoobeeAdmin)
                {
                    if (organizacaoUsuario == null || !string.IsNullOrWhiteSpace(organizacaoUsuario.IdUsuario))
                    {
                        return(usuarioLogado);
                    }

                    if (organizacaoUsuario.Pessoa == null || organizacaoUsuario.Pessoa.Status == false)
                    {
                        return(usuarioLogado);
                    }

                    List <string> idsTimes = new List <string>();
                    foreach (var timePessoa in organizacaoUsuario.Pessoa.TimePessoas)
                    {
                        if (!timePessoa.Status)
                        {
                            continue;
                        }

                        if (timePessoa.IdOrganizacao == organizacaoUsuario.IdOrganizacao)
                        {
                            idsTimes.Add(timePessoa.IdTime);
                        }
                    }

                    usuarioLogado = new UsuarioLogadoMySqlViewModel()
                    {
                        DataCriacao   = organizacaoUsuario.Pessoa.DataCriacao,
                        Email         = organizacaoUsuario.Pessoa.Email,
                        Nome          = organizacaoUsuario.Pessoa.Nome,
                        Foto          = organizacaoUsuario.Pessoa.Foto,
                        Id            = organizacaoUsuario.IdUsuario,
                        IdPessoa      = organizacaoUsuario.IdPessoa,
                        IdOrganizacao = organizacaoUsuario.IdOrganizacao,
                        RoleEnum      = organizacaoUsuario.OrganizacaoUsuarioRole.Role,
                        IdsTimes      = idsTimes
                    };
                }
                else
                {
                    string idOrganizacao;

                    if (!string.IsNullOrWhiteSpace(pessoa.IdUltimaOrgAcessada))
                    {
                        idOrganizacao = pessoa.IdUltimaOrgAcessada;
                    }
                    else
                    {
                        idOrganizacao = _organizacaoMySqlRepository.Obter()?.Id;
                    }

                    usuarioLogado = new UsuarioLogadoMySqlViewModel()
                    {
                        DataCriacao   = DateTime.Now,
                        Email         = pessoa.Email,
                        Nome          = pessoa.Nome,
                        Foto          = pessoa.Foto,
                        Id            = usuario.Id,
                        IdPessoa      = pessoa.Id,
                        IdOrganizacao = idOrganizacao,
                        RoleEnum      = OrganizacaoUsuarioRoleEnum.GoobeeAdmin,
                        IdsTimes      = new List <string>(0)
                    };
                }
            }

            // gerar o token
            if (usuarioLogado != null)
            {
                usuarioLogado.Token = CriaToken(usuarioLogado);
            }

            return(usuarioLogado);
        }