close

Tableau 是一個視覺化報表的商業產品,方便分析數據。

最近手邊有一個任務是要把 Tableau 介接到內部系統裡,需要先對 Tableau 取得 ticket (token):

從以上文章看來,通常會遇到的問題有幾種:

  1. 票證 (token/ticket) 已過期:
    需要使用未過期的 ticket,預設是三分鐘,且不能重複使用。如果想要延長 ticket 的有效期間,可以修改 vizqlserver.trustedticket.timeout_in_seconds:
    Changing the Expiration Timeout of Trusted Tickets
     
  2. 對 trusted 網址請求後,回應內容不是 token,而是出現 "-1":
    需要確認是否已新增受信任的 IP 位址到 Tableau Server,以下是 Tableau 官網不同語種的 KB:
  3. 必須使用正確的路徑:
    • Tableau 站台只有 Default 網站時:http://myserver/trusted/<ticket>/views/<workbook>/<view>
    • Tableau 站台有多個網站時:http://myserver/trusted/<ticket>/t/<site>/views/<workbook>/<view>

 

因為預設的安全性下,如果要直接透過 AJAX 取回 Ticket、詛裝 Tableau 路徑來內嵌,會出現 CROS 錯誤,舉例來說:

Access to XMLHttpRequest at 'https://my_tableau_site/trusted' from origin 'https://test_site' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
POST https://my_tableau_site/trusted net::ERR_FAILED 200

礙於 Tableau server 實在是沒辦法隨時配合調整客製 header,先自己寫一支 CURL 模擬用戶端,拿來抓 ticket:

<?php
$url = "https://my_tableau_site/trusted"
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS,
    http_build_query(
        array(
            "username" => "your_user_name",
            "target_site" => "", // 預設站台 (default site) 可以保留空白,如果有開其他站台要記得設在這裡
            "client_ip" => ""
        )
    )
);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 避免出現 SSL certificate problem: self signed certificate in certificate chain
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 避免出現 SSL certificate problem: self signed certificate in certificate chain
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 如果不加 CURLOPT_RETURNTRANSFER,從 CURL 取回的 ticket 最後會多一個 "1",原本想說用正規表示式把它去掉
// 會出現 1 的原因可參考:"cURL and PHP displaying "1""

// $pattern = "/^(.*)1$/";
// $output = preg_replace($pattern, "$1", $output);

$output = curl_exec($ch);
curl_close($ch);

echo $output;
?>

取回 ticket 後,可以把 ticket 參數塞進頁面,或是用 iframe 串上面說的網址來引用:

  • Tableau 站台只有 Default 網站時:http://myserver/trusted/<ticket>/views/<workbook>/<view>
  • Tableau 站台有多個網站時:http://myserver/trusted/<ticket>/t/<site>/views/<workbook>/<view>

(總覺得還會遇到什麼Q_Q)

arrow
arrow
    文章標籤
    tableau
    全站熱搜

    小攻城師 發表在 痞客邦 留言(0) 人氣()