我看到 StackOverflow 周围没有多少 Tableau 专家,但也许有人以前遇到过这个问题,并且知道解决方案。我是 Tableau 的菜鸟,所以如果这个问题是空洞的,请原谅我。提前致谢!
系统
我们设置 Tableau 的方式是在与 Web 服务器分开的服务器上。该应用程序是用 PHP 编写的,使用稳定版 CakePHP 2.2.0。
10.0.0.10 - webserver
10.0.0.11 - tableau
为了让客户查看 Tableau 生成的报告,我们使用了受信任的身份验证票证系统,在该系统中,客户会获得一个带有特定票证的 URL。然后,客户端使用此票证直接向 tableau 服务器请求报告。
一个例子:
- 客户端获取 http://example.com/reports/view/3 - 内部为 10.0.0.10。
- 服务器 POST 到 10.0.0.11,并要求客户端查看报告 3 的票证
- Tableau Server 使用一个数字(例如 987654321)回复帖子。
- 服务器使用页面响应客户端的 GET,包括票证。
- 客户端获取http://tableau.example.com/trusted/987654321/view3
- Tableau Server 根据票证验证客户端 IP,并使用报告的 HTML 进行响应。
问题
问题是这样的:当代码要求提供 tableau 票号(上面的步骤 2 和 3)时,Tableau 服务器会响应身份验证页面,而不是票证 ID。如果我注释掉 $postdata 数组中的“target_site”参数,tableau 不会以登录页面响应,而是简单地说“-1”。
生成可信 URL 的 PHP 代码:
<?php
public function get_trusted_url($view = 'book2sheet1') {
$email = $this->Auth->user();
$email = $email['Email']; //This email is registered as a Tableau user!
$postdata = http_build_query(
array(
'username' => $email,
'target_site' => 'oursite', //If I comment this line out, Tableau no longer returns an auth page and instead simply returns "-1"
'client_ip' => $_SERVER['REMOTE_ADDR']
)
);
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $postdata
)
);
$context = stream_context_create($opts);
$ticket = file_get_contents('http://10.0.0.11/trusted/', false, $context);
if($ticket > 0) {
return 'http://tableau.example.com/t/rg/trusted/' . $ticket . '/' .$view . '?:embed=yes&:comments=no&:toolbar=yes';
} else {
echo 'failure'; //debug
print_r($ticket); //debug - this prints out the auth page
return false;
}
}
任何帮助将不胜感激!正如我所提到的,我是 Tableau 的菜鸟 :)
返回的登录 html 的图像,使用转储到页面print_r('ticket')
谢谢!