private string GetAppUrlRedirect(string appId, string appUrl, string returnUrl, string login, string userTokenHash) { if (string.IsNullOrWhiteSpace(appId) || string.IsNullOrWhiteSpace(appUrl)) { return(returnUrl.Contains("conta/login") ? "/" : returnUrl); } Uri appUri; Uri.TryCreate(appUrl, UriKind.Absolute, out appUri); if (appUri == null || !appUri.IsAbsoluteUri) { return(returnUrl); } var aplicacao = unit.AplicacaoRepository.GetByAppId(appId); if (aplicacao != null) { // a url informada está cadatrada para a aplicação? if (aplicacao.AplicacaoUrls.Any(x => x.Url.Equals(appUri.Authority, StringComparison.InvariantCultureIgnoreCase))) { //Verificar a permissão do usuário var user = unit.UsuarioRepository.GetByLogin(login); bool temPermissao = unit.UsuarioAplicacaoRepository.VerificarPermissaoUser(login, appId); if (temPermissao) { tokenManager.AddAppUserToken(aplicacao.AppId, userTokenHash); // Criptografar User Token Criptografia cripto = new Criptografia(); cripto.Key = aplicacao.AppKey; var userTokenEncripted = cripto.Encrypt(userTokenHash); return(GetReturnUrlAplicacao(appUri.OriginalString, userTokenEncripted)); } else { ListAlert.Add(new Alert(string.Format("Você não tem acesso para a aplicação '{0}'", aplicacao.Nome), AlertType.Error)); } } else { ListAlert.Add(new Alert(string.Format("Url informada para a aplicação '{0}' não foi encontrada no banco de dados", aplicacao.Nome), AlertType.Error)); } } else { ListAlert.Add(new Alert(string.Format("Aplicação '{0}' não encontrada", aplicacao.Nome), AlertType.Error)); } return(returnUrl); }