public UsuarioViewModel Autentica(AutenticaUsuarioViewModel usuarioViewModel)
        {
            var usuario = Mapper.Map <AutenticaUsuarioViewModel, Usuario>(usuarioViewModel);

            usuario = _service.Autenticar(usuario);

            if (usuario != null)
            {
                return(Mapper.Map <Usuario, UsuarioViewModel>(usuario));
            }

            return(null);
        }
        public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
        {
            var identity = new ClaimsIdentity(context.Options.AuthenticationType);

            context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });

            using (AsyncScopedLifestyle.BeginScope(_container))
            {
                try
                {
                    IUsuarioAppService service = _container.GetInstance <IUsuarioAppService>();


                    AutenticaUsuarioViewModel usuarioRequest = new AutenticaUsuarioViewModel();
                    usuarioRequest.Email = context.UserName;
                    usuarioRequest.Senha = context.Password;

                    var usuario = service.Autentica(usuarioRequest);

                    if (usuario == null)
                    {
                        context.SetError("invalid_grant", "E-mail ou senha incorreta.");
                        return;
                    }


                    identity.AddClaim(new Claim("Usuario", JsonConvert.SerializeObject(usuario)));


                    var principal = new GenericPrincipal(identity, new string[] { });

                    Thread.CurrentPrincipal = principal;

                    context.Validated(identity);
                }
                catch (Exception ex)
                {
                    context.SetError("invalid_grant", ex.Message);
                    return;
                }
            }
        }