Tableau доверенный билет аутентификации с PHP

#php #curl #tableau-api

#php #curl #tableau-api

Вопрос:

Я пытаюсь понять, как доверенный билет аутентификации предназначен для работы с PHP. Я искал разные вопросы и придумал этот код

 $url = 'https://tableau.godigitally.io/trusted/';     
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);    
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    
curl_setopt($ch, CURLOPT_POST, true);     
curl_setopt($ch, CURLOPT_POSTFIELDS, "username=" . $userid . ""); // define what you want to post    
$response = curl_exec($ch);   
curl_close($ch);   
//echo 'Test: ' . $response;  
echo '<iframe src=', $url, $ticket, 'views/Dashboard2_0/Dashboard1?', $urlparams, '" 
       width="700" height="400">   
  </iframe>';
 

Но я получаю следующую ошибку при запуске этого кода
введите описание изображения здесь

Я понятия не имею, где я ошибаюсь. Я подтвердил правильность конфигурации моего сервера, используя методы тестирования, описанные в https://help.tableau.com/current/server/en-us/trusted_auth_testing.htm

Ответ №1:

Чтобы наилучшим образом работать с Tableau и веб-интерфейсом, вам следует добавить библиотеку Tableau js в свое веб-приложение и выполнить следующие действия

  1. Сгенерируйте билет из вызова сервера tableau ,

Чтобы сгенерировать билет с сервера tableau , сначала вы должны добавить своего пользователя на сервер tableau и выполнить следующие действия

это пример кода, который вы можете использовать для создания тикета

 function getTabTicket(tableauServer, username, site){
      return new Promise((resolve,reject)=>{
              let url = new URL(tableauServer   '/trusted');
              let body = {
                          username: username,
                      };
              if (site) {
                          body['target_site'] = site;
                      }
              let postData = querystring.stringify(body);
                         
              let proto = http;
              if (url.protocol === 'https:') {
                          proto = https;
                      }
              let req = proto.request({
                          method: 'POST',
                          hostname: url.hostname,
                          port:url.port,
                          path: '/trusted',
                          headers: {'Content-Type': 'application/x-www-form-urlencoded'}
                      }, function (response) {
                              let ticketData = '';
                              response.on('data', function (chunk) {
                                          ticketData  = chunk;
                                      });
                              response.on('end', function () {
                                          let contents = {ticket: ticketData};
                                          resolve(contents);
                                      });
                          });
              req.on('error', function (error) {
                        reject(error);
                        console.log('ERROR: '   error);
                      });
              req.write(postData);
              req.end();
            })
}
 

Вы можете проверить эту библиотеку с открытым исходным кодом, которую вы можете использовать для создания билета.

https://github.com/aalteirac/jwt-tableau-broker

https://anthony-alteirac.medium.com/tableau-trusted-authentication-the-ticket-broker-cloud-friendly-709789942aa3

После создания билета вы должны вызвать сервер tableau, чтобы получить отчет .

Для этого я использую библиотеку js.

Теперь 2-й шаг — включить js с помощью NPM или по ссылке

и затем вы можете вызвать функцию

переменная tableuReport = new tableau.Viz(this.reportContainerDiv, fullTableauDashboardUrl, Constants.tableauReportUISettings);

reportContainerDiv // элемент div, в котором вы должны отобразить компонент

fullTableauDashboardURL = {tableau_server_url} «доверенный»/{ticektId}/reportsuburl // URL-адрес таблицы в формате

например, ваш, tableau_server_url = «https://tableau-dev-abc.com » tableauDashboardUrl = «#/site/CovidApp/views/IndiaReport/IndiaReport_v2?:iid=1/»

TicketID = «fjdjadheuihrieywfiwnfih»

Таким образом, ваш окончательный URL-адрес будет выглядеть

fullTableauDashboardUrl = «https://tableau-dev-abc.com/trusted/fjdjadheuihrieywfiwnfih/t/CovidApp/views/IndiaReport/IndiaReport_v2?:iid=1

fullTableauDashboardUrl.replace(«#/site», «t»); PS: мы должны заменить #/site на t