OAuth 2.0 信頼を使用して接続済みアプリを設定する

Tableau Server 管理者は、1 つまたは複数の外部認証サーバー (EAS) を登録し、OAuth 2.0 標準プロトコルを使用して Tableau Server と EAS の間に信頼関係を確立できます。

重要:

  • このトピックの一部の手順では、サード パーティーのソフトウェアとサービスを使用して構成する必要があります。Tableau Server で EAS 機能を有効にする手順については最善を尽くして検証していますが、サードパーティのソフトウェアとサービスが変更されたり、ユーザーの組織の方針が異なる場合があります。問題が発生した場合、正式な構成の詳細情報とサポートについては、サードパーティーのドキュメントを参照してください。
  • EAS を介した埋め込みを有効にするには、HTTP トラフィックに対して SSL を使用するように Tableau Server を構成する必要があります。
  • セッション トークンを有効にするためには、外部アプリケーションと外部アプリケーションをホストするサーバーの時計が協定世界時 (UTC) に設定されている必要があります。いずれかの時計が異なる規格を使用している場合、接続済みアプリは信頼されません。

Tableau 接続済みアプリが OAuth 2.0 信頼と連携するしくみ

Tableau Server サイトと外部アプリケーション間の信頼関係は、JSON Web Token (JWT) 標準の認証トークンを通じて確立および検証されます。

埋め込まれた Tableau コンテンツが外部アプリケーションに読み込まれるときは、認証コードフローの OAuth フローが使用されます。ユーザーが IdP に正常にサインインすると、Tableau Server に自動的にサインインします。以下に説明するステップに従って、EAS を Tableau Serverに登録します。

接続済みアプリの主要コンポーネント

接続済みアプリの次のコンポーネントは、外部アプリケーションの JWT と連携して、ユーザーを認証し、埋め込みコンテンツを表示します。

  • 外部認証サーバー (EAS): ユーザーと外部アプリケーション間のインターフェイスとして機能するサーバー (通常は IdP)。サーバーは、保護された Tableau コンテンツへのユーザー アクセスを認証および承認します。

  • 発行者 URL: EAS インスタンスを一意に識別する URL。

接続済みアプリのワークフロー

埋め込みのワークフロー

次の図は、外部認証サーバー (EAS)、外部アプリケーション (Web サーバーと Web ページ)、Tableau 接続済みアプリ間の認証のしくみを示しています。

  1. ユーザーが Web ページにアクセスします: ユーザーが Web ページに埋め込まれたコンテンツにアクセスすると、Web ページが外部アプリケーションに GET 要求を送信します。

  2. 外部アプリケーションがリクエストを EAS にリダイレクトします: 外部アプリケーションが、外部認証サーバー (EAS) にリダイレクトする Web ページを使用して応答します。

  3. ユーザーが EAS で認証します: ユーザーが EAS を使用して認証および承認を行います。

  4. EAS が認証コードを使用して Web ページに応答します: EAS が認証コードを使用してページに応答し、Web ページにリダイレクトします。

  5. EAS が認証コードを JWT に変換します: Web ページが EAS を呼び出して認証コードを JWT に変換し、それを埋め込みコンテンツの URL に挿入します。

  6. Web ページが Tableau にコンテンツを要求します: Web ページが iFrame を読み込み、Tableau に GET リクエストを送信します。

  7. Tableau がトークンを検証します: Tableau が署名を使用して URL 内の JWT を検証し、コンテンツの要求に応答し、JWT で定義された埋め込みスコープを考慮します。

接続済みアプリを作成する

ステップ 1: 始める前に

EAS を Tableau Server に登録するには、EAS がすでに構成されている必要があります。さらに、EAS は、以下の表にリストされている登録済みのクレームとヘッダーを含む有効な JSON Web Token (JWT) を送信する必要があります。

クレーム 名前 説明または必要な値
"kid" キー ID 必須 (ヘッダー内)アイデンティティ プロバイダーからの一意のキー識別子
"iss" 発行者 必須 (ヘッダー内またはクレームとして)信頼できる接続済みアプリとその署名キーを識別する一意の発行元 URI
"alg" アルゴリズム 必須 (ヘッダー内)JWT 署名アルゴリズム。サポートしているアルゴリズム名の一覧は、javadoc.io ドキュメントの「Class JWSAlgorithm」(新しいウィンドウでリンクが開く)ページにあります。この署名アルゴリズムは、vizportal.oauth.external_authorization_server.blocklisted_jws_algorithmsのコマンドを使用して設定できます。
"sub" 件名 認証された Tableau Server ユーザーのユーザー名
"aud" オーディエンス

値は "tableau" である必要があります。

"exp" 有効期限 JWT の有効期限が切れないようにする必要があります。JWT の有効期限 (UTC) は、設定された最大有効期間の範囲内である必要があります。最大有効期間は、vizportal.oauth.external_authorization_server.max_expiration_period_in_minutes コマンドを使用して構成できます。
"jti" JWT ID JWT ID クレームは、JWT に一意の識別子を提供し、大文字と小文字を区別します。
"scp" スコープ

埋め込みのワークフローの場合、サポートされる値は次のとおりです。

"tableau:views:embed"
"tableau:views:embed_authoring " (Tableau Server 2022.3 で追加)
"tableau:metrics:embed" (Tableau Server 2023.3 で廃止)
"tableau:ask_data:embed"(Tableau Server 2023.1 で追加。Tableau Server 2024.2 で廃止)

注:

  • 値はリスト型として渡す必要があります。
  • tableau:views:embed の場合、この範囲は、Tableau Server で既に構成されているユーザーのパーミッションを考慮し、元のビューで使用可能な場合は、ユーザーが埋め込みビューのツールを操作できるようにします。
  • 埋め込みコードでは、ツールバー パラメーターを除外することをお勧めします。詳細については、以下の既知の問題 (埋め込みのワークフローのみ)を参照してください。

REST API 承認ワークフローの場合は、「JWT 認可をサポートする REST API メソッド」を参照してください。

認証に REST API を使用するメタデータ API ワークフローの場合、サポートしているスコープは tableau:content:read のみです。

認証に REST API 使用する VizQL データ サービス ワークフローの場合、サポートされるスコープは tableau:viz_data_service:read のみです。

https://tableau.com/groups 動的グループ メンバーシップ 埋め込みのワークフローのみ。

値は、Tableau Server の 1 つまたは複数のグループ名に一致する必要があります。詳細については、以下のセクション「OAuth 2.0 信頼を使用して接続済みアプリを設定する」を参照してください。

(ユーザー属性) (ユーザー属性値)

埋め込みのワークフローのみ。

Tableau Server 2025.1 以降では、 ユーザー属性を含めることができます。埋め込みコンテンツでユーザー属性関数が使用されると、Tableau は認証されたユーザーのコンテキストをチェックし、ランタイムに表示できるデータを決定します。

注:

注: 上記の JWT クレームは、インターネット技術標準化委員会 (IETF) によって配布されたドキュメントの「Registered Claim Names」(新しいウィンドウでリンクが開く)セクションに文書化されています。

ステップ 2: EAS を Tableau Server に登録する

EAS を Tableau Server に登録することにより、EAS と Tableau Server の間に信頼関係を確立します。これは、ユーザーが外部アプリケーションに埋め込まれた Tableau コンテンツにアクセスすると、IdP で認証するようにリダイレクトされることを意味します。EAS は認証トークンを生成して、検証のために Tableau Server に渡します。信頼関係が検証されると、埋め込まれたコンテンツへのアクセスがユーザーに許可されます。

注: 一部の EAS では、アプリケーションが Tableau コンテンツにアクセスするためにユーザーの承認を求める同意ダイアログを表示するオプションがサポートされています。ユーザーに最高のエクスペリエンスを提供するには、ユーザーに代わって外部アプリケーションの要求に自動的に同意するように EAS を構成することをお勧めします。

サイトレベルの EAS について

Tableau Server 2024.2 以降では、サイトレベルの EAS を構成できます。サイトレベルで EAS を登録するには、Tableau サービス マネージャー (TSM) で接続済みアプリ有効にする必要があります。

サーバー全体の EAS を登録するには、TSM Web UI を使用する方法と TSM CLI を使用する方法の 2 つがあります。

EAS を登録すると、確立された信頼関係が Tableau Server 上のすべてのサイトに適用されます。

オプション 1: TSM Web UI を使用する

  1. Tableau Server 管理者として、Tableau サービス マネージャー (TSM) の Web UI にサインインします。詳細については、Tableau サービス マネージャーの Web UI へのサインインを参照してください。

  2. 次のいずれか 1 つを実行します。

    • Tableau Server 2024.2 以降では、[ユーザー ID とアクセス] ページ > [接続済みアプリ] タブに移動します。

    • Tableau Server 2023.3 以前では、[ユーザー ID とアクセス] ページ > [認可サーバー] タブに移動します。

  3. 次のいずれか 1 つを実行します。
    • Tableau Server 2024.2 以降の場合:

      1. [Enable connected apps (接続済みアプリを有効化)] チェックボックスを選択します。

      2. 2 番目のラジオ ボタン [接続済みアプリ (サイトレベルで設定) とサーバー全体の OAuth 2.0 信頼 (以下で設定) を許可] を選択します。

      3. [Issuer URL (発行元 URL)] テキスト ボックスに、EAS の発行元 URL を貼り付けます。

      4. [保留中の変更を保存] ボタンをクリックします。

    • Tableau Server 2023.3 以前の場合:

      1. [Enable OAuth access for embedded content (埋め込みコンテンツの Oauth アクセスを有効にする)] チェック ボックスをオンにします。

      2. [Issuer URL (発行元 URL)] テキスト ボックスに、EAS の発行元 URL を貼り付けます。

      3. [保留中の変更を保存] ボタンをクリックします。

        外部認証サーバーフォームを登録します。

  4. 終了したら、次の手順を実行します。
    1. ページの右上隅にある [変更を保留中] ボタンをクリックします。

    2. ページの右下隅にある [変更を適用して再起動] ボタンをクリックして、Tableau Server を停止してから再起動します。

      変更を適用または破棄するオプションを備えた、承認待ちの外部設定変更のリスト。

オプション 2: TSM CLI を使用する

  1. クラスタの最初のノード (TSM がインストールされているノード) で管理者としてコマンド プロンプトを開きます。
  2. 次のコマンドを実行します。

    tsm configuration set -k vizportal.oauth.external_authorization.enabled -v true
    tsm configuration set -k vizportal.oauth.external_authorization_server.issuer -v "<issuer_url_of_EAS>"
    tsm restart

Tableau Server 2024.2 以降では、サイトに 1 つまたは複数の EAS を登録できます。サイトレベルで EAS を登録すると、確立された信頼関係はサイトのみに適用されます。

注: サイトレベルの EAS を構成するための前提条件は、TSM で接続済みアプリが有効になっていることです。

ステップ 1: 接続済みアプリを有効にする

  1. Tableau Server 管理者として、Tableau サービス マネージャー (TSM) の Web UI にサインインします。詳細については、Tableau サービス マネージャーの Web UI へのサインインを参照してください。

  2. 「ユーザー ID とアクセス」ページ > [接続済みアプリ] タブに移動します。

  3. [Enable connected apps (接続済みアプリを有効化)] チェックボックスを選択します。

  4. 次のいずれか 1 つを実行します。

    • 最初のラジオ ボタン [Allow connected apps (configure at site level) (接続済みアプリ (サイトレベルで構成) を許可)] を選択して、サイトレベルのみで EAS を登録できるようにします。

    • (既定) 2 番目のラジオ ボタン [接続済みアプリ (サイトレベルで設定) とサーバー全体の OAuth 2.0 信頼 (以下で設定) を許可] を選択して、サイトレベルとサーバー全体の両方で EAS を登録できるようにします。このオプションを選択する場合は、サイトレベルで指定された発行者 URL がサーバー全体の発行者 URL と異なることを確認してください。

  5. [保留中の変更を保存] ボタンをクリックします。

  6. 終了したら、次の手順を実行します。
    1. ページの右上隅にある [変更を保留中] ボタンをクリックします。

    2. ページの右下隅にある [変更を適用して再起動] ボタンをクリックして、Tableau Server を停止してから再起動します。

ステップ 2: EAS を登録する

  1. Tableau Server 管理者として、Tableau Server にサインインします。

  2. 左側のペインから、[設定] > [接続済みアプリ] の順に選択します。

  3. [New Connected App (新しい接続済みアプリ)] ボタンのドロップダウン矢印をクリックして、[OAuth 2.0 Trust (OAuth 2.0 信頼)] を選択します。

  4. [Create Connected App (接続済みアプリの作成)] ダイアログ ボックスで、次の手順を行います。
    1. [名前] テキスト ボックスに、接続済みアプリ名を入力します。

    2. [Issuer URL (発行元 URL)] テキスト ボックスに、EAS の発行元 URL を貼り付けます。

    3. [接続済みアプリを有効にする] を選択します。セキュリティ上の理由から、接続済みアプリは作成時に既定で無効に設定されています。

    4. 完了したら、[作成] ボタンをクリックします。

  5. 接続済みアプリを作成したら、接続済みアプリのサイト ID をコピーします。サイト ID は、上記のステップ 1 で説明した JWT の "aud" (オーディエンス) クレームに使用されます。

    外部認可サーバーの詳細と、サイト ID をコピーするためのボタン。

ステップ 3: 次のステップ

埋め込みのワークフローの場合

EAS を使用するように Tableau Server を構成した後、外部アプリケーションに埋め込みコードを追加する必要があります。手順 1 で説明したように、EAS によって生成された有効な JWT が、外部アプリケーションが呼び出す Web コンポーネントに含まれていることを確認してください。

Tableau コンテンツの埋め込みの詳細については、以下を参照してください。

注: 埋め込みコンテンツにアクセスするユーザーを正常に認証するには、ブラウザーがサードパーティーの Cookie を許可するように設定されている必要があります。

埋め込み用のドメイン許可リストを使用してコンテンツを埋め込むことができる場所を制御する

Tableau Server 2023.3 より、Tableau REST API の「サイトの埋め込み設定の更新」メソッドを使用して、Tableau コンテンツを制限なしで埋め込むか、または特定のドメインに制限して埋め込むかを制御できるようになります。

既定では、埋め込み用のサイト設定 unrestrictedEmbeddingtrue に設定されており、制限なしで埋め込むことができます。または、この設定を false に設定し、allowList パラメーターを使用して、外部アプリケーションの Tableau コンテンツを埋め込むドメインを指定することができます。

詳細については、次のいずれかまたは両方を参照してください。

REST API 認証ワークフローの場合

JWT を構成したら、認証アクセスのために、有効な JWT を REST API サインイン要求に追加する必要があります。詳細については、「接続済みアプリのアクセス スコープ」を参照してください。

メタデータ API ワークフローの場合

JWT を構成したら、有効な JWT を REST API サインイン要求に追加する必要があります。詳細については、「接続済みアプリのアクセス スコープ」を参照してください。

SCIM ワークフローの外部トークンの場合

JWT を構成したら、SCIM 機能を有効にする必要があります。詳細については、「OAuth 2.0 信頼を使用して接続済みアプリを設定する」を参照してください。

既知の問題 (埋め込みのワークフローのみ)

接続済みアプリの使用にはいくつかの既知の問題がありますが、これらは今後のリリースで対処される予定です。

  • ツールバー機能: 埋め込みコンテンツにツールバーのパラメーターが定義されている場合、すべてのツールバー機能が動作するとは限りません。この問題を回避するには、次の例のようにツールバーのパラメーターを非表示にすることをお勧めします。

    <tableau-viz id='tab-viz' src='https://<your_server>/t/<your_site>/...'
    	toolbar='hidden'>
    </tableau-viz>

  • パブリッシュされたデータ ソース: データベースの認証資格情報の入力を求める [ユーザーにメッセージを表示] が設定されているパブリッシュされたデータ ソースは表示されません。この問題を回避するには、可能であれば、データ ソースの所有者がデータベースの認証資格情報を埋め込むことをお勧めします。

  • 複数のサイトへの埋め込みビュー: Tableau Server 2023.1 以前では、同じブラウザーで異なるサイトのビューに切り替えると、エラー「1008: 接続アプリのシークレットを取得できませんでした」が発生します。この問題を回避するには、Tableau Server 2023.3 以降にアップグレードしてください。

トラブルシューティング

埋め込まれたコンテンツが外部アプリケーションに表示されない場合、または Tableau REST API 認証に失敗した場合は、ブラウザーのデベロッパー ツールを使用して、 Tableau Server で有効になっている EAS 機能に関連する可能性のあるエラー コードを検査および特定できます。

次の表を参照して、エラー コードの説明と可能な解決策を確認してください。

エラー コード概要説明可能な解決策または説明
5SYSTEM_USER_NOT_FOUNDTableau ユーザーが見つかりませんでした
この問題を解決するには、JWT の 'sub' (サブジェクト) クレーム値が、認証済みの Tableau Server の "username" であることを確認します。この値は大文字と小文字が区別されます。
16LOGIN_FAILEDログインできませんでしたこのエラーは通常、JWT の次のクレームの問題のいずれかが原因で発生します。
67FEATURE_NOT_ENABLEDオンデマンド アクセスがサポートされていませんオンデマンド アクセスは、ライセンス認証されている Tableau Cloud サイトを介してのみ利用できます。
10081COULD_NOT_RETRIEVE_IDP_METADATAEAS メタデータ エンドポイントがありませんこの問題を解決するには、EAS が正しく構成されており、正しい発行元が呼び出されていることを確認します。
10082AUTHORIZATION_SERVER_ISSUER_NOT_SPECIFIED発行元がありませんこの問題を解決するには、正しい発行元が呼び出されていることを確認します。発行元の URL を変更するには、vizportal.oauth.external_authorization_server.issuer コマンドを使用します。
10083BAD_JWTJWT ヘッダーに問題が含まれています'kid' (シークレット ID) または 'clientId' (発行元) のクレームが JWT ヘッダーにありません。この問題を解決するには、この情報が含まれていることを確認します。
10084JWT_PARSE_ERRORJWT に問題が含まれていますこの問題を解決するには、次を確認します。
  • この JWT で参照される 'aud' (オーディエンス) 値が "tableau" 値を使用していることを確認します。この値は大文字と小文字が区別されます。
  • 'aud' (オーディエンス) と 'sub' (サブジェクト) は JWT に含まれています。
10085COULD_NOT_FETCH_JWT_KEYSJWT がキーを見つけることができませんでしたシークレットを見つけることができませんでした。

この問題を解決するには、正しい発行元が呼び出されていることを確認します。発行元の URL を変更するには、vizportal.oauth.external_authorization_server.issuer コマンドを使用します。

10087BLOCKLISTED_JWS_ALGORITHM_USED_TO_SIGNJWT 署名アルゴリズムの問題この問題を解決するには、署名アルゴリズムを削除します。詳細については、vizportal.oauth.external_authorization_server.blocklisted_jws_algorithmsを参照してください。
10088RSA_KEY_SIZE_INVALIDJWT 署名要件の問題この問題を解決するには、EAS または IdP を使用して、JWT が 2048 ビットの RSA キー サイズで署名されていることを確認します。
10091JTI_ALREADY_USED一意の JWT が必要ですJWT はすでに認証プロセスで使用されています。この問題を解決するには、EAS または IdP が新しい JWT を生成する必要があります。
10092NOT_IN_DOMAIN_ALLOW_LIST埋め込みコンテンツのドメインが指定されていませんこの問題を解決するには、設定 unrestrictedEmbeddingtrue に設定されていること、または domainAllowlist パラメーターに、Tableau REST API の「サイトの埋め込み設定の更新(新しいウィンドウでリンクが開く)」メソッドを使用して Tableau コンテンツを埋め込むドメインが含まれていることを確認してください。
10094MISSING_REQUIRED_JTIJWT ID がありませんこの問題を解決するには、'jti' (JWT ID) が JWT に含まれていることを確認します。
10096JWT_EXPIRATION_EXCEEDS_CONFIGURED_EXPIRATION_PERIOD 'exp' (有効期限) が既定の最大有効期間を超えています。この問題を解決するには、有効な JWT に必要な登録済みのクレーム(新しいウィンドウでリンクが開く)を確認し、正しい値を使用するようにします。最大有効期間を変更するには、vizportal.oauth.external_authorization_server.max_expiration_period_in_minutes コマンドを使用します。
10097SCOPES_MALFORMEDスコープ クレームに関する問題このエラーは、'scp' (スコープ) クレームが JWT にないか、リスト型として渡されていない場合に発生する可能性があります。この問題を解決するには、'scp' が JWT に含まれ、リスト型として渡されていることを確認します。JWT に関するトラブルシューティングのヘルプについては、auth0 サイトの「デバッガー(新しいウィンドウでリンクが開く)」を参照してください。
10098JWT_UNSIGNED_OR_ENCRYPTEDJWT が署名されていないか、暗号化されていますTableau は、署名されていない JWT または暗号化された JWT をサポートしていません。
10099SCOPES_MISSING_IN_JWTスコープのクレームがありませんJWT に必要な 'scp' (スコープ) クレームがありません。この問題を解決するには、'scp' が JWT に含まれていることを確認します。JWT に関するトラブルシューティングのヘルプについては、auth0 サイトの「デバッガー(新しいウィンドウでリンクが開く)」を参照してください。
10100JTI_PERSISTENCE_FAILED予期しない JWT ID エラー'jti' (JWT ID) で予期しないエラーが発生しました。この問題を解決するには、新しい 'jti' で新しい JWT を生成する必要があります。
10103JWT_MAX_SIZE_EXCEEDEDJWT が最大サイズを超えていますJWT サイズが 8000 バイトを超えている場合、このエラーが発生する可能性があります。この問題を解決するには、必要なクレームのみが Tableau Server に渡されていることを確認してください。
フィードバックをお送りいただき、ありがとうございます。フィードバックは正常に送信されました。ありがとうございます!