1

Tableau ビューを PHP Web アプリケーションに埋め込んでいます。基本的に匿名認証を許可する Tableau Server で有効なゲスト アカウントを使用していました。このスキームでは、fitvids.js/fluidvids.js などの JavaScript ソリューションを使用して、レスポンシブ埋め込みは簡単で、うまく機能しました。

最近、特定のユーザーを Web アプリから Tableau Server に渡し、一意の 1 回限りの信頼できるチケットを生成し、ビューをレンダリングする、信頼できる認証に変更を加えました。標準の固定埋め込みでは、すべてが期待どおりに機能します。ただし、fitvids.js または fluidvids.js を実装すると、恐ろしい Tableau エラーが発生しますCould not locate unexpired trusted ticket

私の最善の推測では、内訳は次のいずれかです。

  1. チケット生成と URL 作成のための PHP
  2. JavaScript の処理順序 (おそらく)
  3. Tableau Server の制限

iframe 内のコンテンツは動的であるため、css のみのソリューションは機能しません。

参考までに、問題の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>
4

1 に答える 1