响应式iframe + Tableau受信任的身份验证

时间:2013-11-25 16:14:41

标签: php jquery iframe responsive-design tableau

我正在PHP Web应用程序中嵌入Tableau视图。我们一直在使用Tableau Server启用的来宾帐户,该帐户基本上允许进行匿名身份验证。根据这个方案,响应式嵌入很简单,工作得很好,使用了诸如fitvids.js / fluidvids.js之类的javascript解决方案。

最近,我们对可信身份验证进行了更改,该身份验证将特定用户从Web应用程序传递到Tableau Server,生成唯一的一次性受信任票证并呈现视图。使用标准的固定嵌入,一切都按预期工作。但是,在实现fitvids.js或fluidvids.js时,我们会遇到可怕的Tableau错误:Could not locate unexpired trusted ticket

我最好的猜测是,故障要么是:

  1. 用于生成故障单和创建网址的PHP
  2. javascript的处理顺序(最有可能)
  3. Tableau Server限制
  4. 仅限css解决方案不起作用,因为iframe内的内容是动态的。

    供参考,这是有问题的php:

    <?php
    /**
     * Implementation of Tableau trusted auth for php
     *
     * http://onlinehelp.tableausoftware.com/v8.1/server/en-us/trusted_auth_webURL.htm
     */
    function get_trusted_url($user, $server, $view_url, $site) {
      $params = ':embed=yes&:toolbar=yes:tabs=no';
      $ticket = get_trusted_ticket($server, $user, $_SERVER['REMOTE_ADDR'], $site);
    
      return "http://$server/trusted/$ticket/$view_url?$params";
    }
    
    // Note that this function requires the pecl_http extension.
    // See: http://pecl.php.net/package/pecl_http
    
    // the client_ip parameter isn't necessary to send in the POST unless you have
    // wgserver.extended_trusted_ip_checking enabled (it's disabled by default)
    function get_trusted_ticket($wgserver, $user, $remote_addr, $site) {
      $params = array(
        'username' => $user,
        'client_ip' => $remote_addr,
        'target_site' => $site
      );
    
      return http_parse_message(http_post_fields("http://$wgserver/trusted", $params))->body;
    }
    ?>
    

    示例嵌入:

    <iframe src="<?php echo get_trusted_url($user,$server,$view_url,$site);?>"></iframe>
    

1 个答案:

答案 0 :(得分:0)

运行Fiddler跟踪,显示问题出在javascript执行上。

使用固定比例嵌入,对受信任的票证网址只有一个请求:

 1. /content/demo-tableau-trusted
 2. /trusted/Sz1y2Beu6Wr2EZnIg37-7oPm/t/education/views/Attendance/AttendanceDashboard?:embed=yes&:toolbar=yes:tabs=no
 3. /t/education/views/Attendance/AttendanceDashboard?:embed=yes&:toolbar=yes:tabs=no

然后使用javascript解决方案(在这种情况下为FluidVids),对同一个受信任的票证网址有两个请求:

 1. /content/demo-tableau-trusted
 2. /trusted/eg93TnSj0SQuhoCdHJbh0t94/t/education/views/Attendance/AttendanceDashboard?:embed=yes&:toolbar=yes:tabs=no
 3. /trusted/eg93TnSj0SQuhoCdHJbh0t94/t/education/views/Attendance/AttendanceDashboard?:embed=yes&:toolbar=yes:tabs=no