繁体   English   中英

Tableau Tickets - POST以获取返回登录表单的票证,而不是票证ID

[英]Tableau Tickets - POST to get ticket returning login form, not ticket ID

我发现StackOverflow上没有很多Tableau专家,但也许有人之前有过这个问题,并且知道解决方案。 我是Tableau的总菜鸟,所以请原谅我,如果这个问题是无聊的。 提前致谢!

系统

我们设置Tableau的方式是在与Web服务器分开的服务器上。 该应用程序是用PHP编写的,使用CakePHP 2.2.0稳定版。

10.0.0.10 - webserver
10.0.0.11 - tableau

为了让客户端查看Tableau生成的报告,我们使用受信任的身份验证票证系统,在该系统中,客户端将获得具有特定票证的URL。 然后,客户端使用此票证直接向tableau服务器询问报告。

一个例子:

  1. 客户端GETS http://example.com/reports/view/3 - 内部为10.0.0.10。
  2. 服务器POSTS到10.0.0.11,并要求客户端查看报告3的票证
  3. Tableau Server使用数字响应帖子,例如987654321。
  4. 服务器使用页面(包括票证)响应客户端的GET。
  5. 客户GETS http://tableau.example.com/trusted/987654321/view3
  6. Tableau Server根据故障单验证客户端IP,并使用报告的HTML进行响应。

问题

问题是:当代码请求表格票号(上面的步骤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')转储到页面

tableau auth登录页面转储

谢谢!

我要做的第一件事就是确保Trusted Ticketing在真空中工作。 这个链接http://ttrequest.notlong.com将让您进入一个文件夹,其中包含一个简单的HTML / JavaScript页面,您可以使用该页面确保正确配置所有内容。 然后,仔细查看您的代码。

为target_site提供值(即使是零长度字符串)也是必要的,因为它告诉我们您要为哪个Tableau站点请求票证。 空白/零长度字符串=“默认网站”,基本上。

我知道PHP很少,但Tableau提供了一些我过去使用的示例代码。 它不使用file_get_contents()来执行POST,而是依赖于http_parse_message() ......它适用于我:

 Function get_trusted_ticket_direct($server, $user, $targetsite) {

  $remote_addr = $_SERVER['REMOTE+ADDR'];  
  $params = array(
    'username' => $user,
    'client_ip' => $remote_addr,
    'target_site' => $targetsite
      );

    $ticket= http_parse_message(http_post_fields("http://$server/trusted", $params))->body;

  if ($ticket > 0) {
     return $ticket;
  }
  else
    return 0;
} 

老实说,我不知道file_get_contents()是否被视为比PHP社区中的http_parse_message()更好的方法(也许有人可以对此发表评论),但示例代码是可靠的,除了它仍然没有' t包括对target_site参数的引用(因为它是在Tableau具有多租期之前编写的)。

示例代码可以在C:\\ Program Files(x86)\\ Tableau \\ Tableau Server \\ 7.0 \\ extras \\ embedding \\ php中找到

祝好运!

您必须使用网站ID而不是“名称”。 还要注意网站名称和ID不是同一个字符串,因为返回了html页面; 确保您的网站名称和ID不同!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM