close
Tableau 是一個視覺化報表的商業產品,方便分析數據。
最近手邊有一個任務是要把 Tableau 介接到內部系統裡,需要先對 Tableau 取得 ticket (token):
- 建立 ticket 的方法:測試受信任的驗證
- ticket 無法使用的錯誤排除:錯誤「Could not locate unexpired trusted ticket」
從以上文章看來,通常會遇到的問題有幾種:
- 票證 (token/ticket) 已過期:
需要使用未過期的 ticket,預設是三分鐘,且不能重複使用。如果想要延長 ticket 的有效期間,可以修改 vizqlserver.trustedticket.timeout_in_seconds:
Changing the Expiration Timeout of Trusted Tickets
- 對 trusted 網址請求後,回應內容不是 token,而是出現 "-1":
需要確認是否已新增受信任的 IP 位址到 Tableau Server,以下是 Tableau 官網不同語種的 KB: - 必須使用正確的路徑:
- 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)
文章標籤
全站熱搜
留言列表