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

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

重要:

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

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

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

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

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

接続済みアプリの次のコンポーネントは、外部アプリケーションの 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 Cloudサイトに登録するには、EAS がすでに構成されている必要があります。さらに、EAS は、以下の表にリストされている登録済みのクレームとヘッダーを含む有効な JSON Web Token (JWT) を送信する必要があります。

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

値は "tableau:<site_luid>" である必要があります。

サイト LUID を取得するには、Tableau REST API のサイン イン メソッドを使用するか、以下の手順に従ってサイト ID をコピーします。注: サイト ID をコピーする前に、ここで説明する手順を使用して EAS を登録する必要があります。

  1. [設定] > [接続済みアプリ] を選択し、[外部認証サーバー] 接続済みアプリを選択します。
  2. [サイト ID をコピー] ボタンをクリックします。

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

"exp" 有効期限

JWT の有効期限が切れないようにする必要があります。JWT の有効期限 (UTC) は、最大有効期間 (10分) 内である必要があります。

"jti" JWT ID JWT ID クレームは、JWT に一意の識別子を提供し、大文字と小文字を区別します。
"scp" スコープ

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

"tableau:views:embed"
"tableau:views:embed_authoring "
"tableau:metrics:embed" (2023 年 10 月 (Tableau 2023.3) で廃止)
"tableau:ask_data:embed"(2024 年 2 月に廃止 (Tableau 2024.1))

注:

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

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

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

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

https://tableau.com/oda オンデマンド アクセス - クレーム (機能を有効化) 埋め込みのワークフローのみ。

値は "true" にして、1 つまたは複数の Tableau Cloud グループを指定する必要があります (次の行を参照)。詳細については、埋め込み分析や容量ベースの Viewer ブロックのライセンスなどの前提条件を含め、Tableau 埋め込み API v3 ヘルプの「データ アクセスのカスタマイズと制御」(新しいウィンドウでリンクが開く)のページを参照してください。

https://tableau.com/groups オンデマンド アクセス - クレーム (グループ名を指定) 埋め込みのワークフローのみ。

値は、Tableau Cloud の 1 つまたは複数のグループの名前に一致する必要があります。詳細については、埋め込み分析や容量ベースの Viewer ブロックのライセンスなどの前提条件を含め、Tableau 埋め込み API v3 ヘルプの「データ アクセスのカスタマイズと制御」(新しいウィンドウでリンクが開く)のページを参照してください。

動的グループ メンバーシップ 埋め込みのワークフローのみ。

値は、Tableau Cloud の 1 つまたは複数のグループの名前に一致する必要があります。詳細については、アサーションを使用した動的グループ メンバーシップを参照してください。

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

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

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

注:

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

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

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

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

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

  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. 名前、URL、およびアプリを有効にするためのチェックボックスのフィールドを備えた、接続済みアプリを作成するためのフォーム。
  5. 接続済みアプリを作成したら、接続済みアプリのサイト ID をコピーします。サイト ID は、上記のステップ 1 で説明した JWT の "aud" (オーディエンス) クレームに使用されます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

トラブルシューティング

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

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

エラー コード 概要 説明 可能な解決策または説明
5 SYSTEM_USER_NOT_FOUND Tableau ユーザーが見つかりませんでした この問題を解決するには、JWT の 'sub' (サブジェクト) クレーム値が、認証済みの Tableau Cloud ユーザーのユーザー名 (メール アドレス) であることを確認します。この値は大文字と小文字が区別されます。
16 LOGIN_FAILED ログインできませんでした このエラーは通常、JWT の次のクレームの問題のいずれかが原因で発生します。
  • 'exp' (有効期限) が既定の最大有効期間を超えています。この問題を解決するには、有効な JWT に必要な登録済みのクレーム(新しいウィンドウでリンクが開く)を確認し、正しい値が 10 分を超えないようにします。
  • 'sub' (サブジェクト) が、不明なユーザーを呼び出しています。この問題を解決するには、'sub' (サブジェクト) 値が、認証済みの Tableau Cloud ユーザーのユーザー名 (メール アドレス) であることを確認します。
67 FEATURE_NOT_ENABLED オンデマンド アクセスがサポートされていません オンデマンド アクセスは、ライセンス認証されている Tableau Cloud サイトを介してのみ利用できます。
142 EXTERNAL_AUTHORIZATION_SERVER_NOT_FOUND EAS が見つかりません この問題を解決するには、正しい発行元が呼び出されていることを確認します。
143 EXTERNAL_AUTHORIZATION_SERVER_LIMIT_EXCEEDED EAS 制限を超えました サイトは、登録済みの外部認証サーバー (EAS) の最大許容数 (1) に達しました。
144 INVALID_ISSUER_URL 発行元の URL が無効です 発行元の URL が無効であるか、'iss' (発行元) 属性が JWT にありません。
149 EAS_INVALID_JWKS_URI JWKS URI がありません JWKS URI が IdP メタデータに存在しないか、JWKS URI が Tableau で構成されていません。この問題を解決するには、有効な JWKS URI を構成します。
150 EAS_RETRIEVE_JWK_SOURCE_FAILED キーソースの取得に失敗しました この問題を解決するには、 JWKS URI が正しく構成されていることを確認します。
151 EAS_RETRIEVE_METADATA_FAILED issuerUrl からメタデータを取得できませんでした この問題を解決するには、 JWKS URI が正しく構成されていることを確認します。
10081 COULD_NOT_RETRIEVE_IDP_METADATA EAS メタデータ エンドポイントがありません この問題を解決するには、EAS が正しく構成されており、正しい発行元が呼び出されていることを確認します。
10082 AUTHORIZATION_SERVER_ISSUER_NOT_SPECIFIED 発行元がありません この問題を解決するには、正しい発行元が呼び出されていることを確認します。
10083 BAD_JWT JWT ヘッダーに問題が含まれています 'kid' (シークレット ID) または 'clientId' (発行元) のクレームが JWT ヘッダーにありません。この問題を解決するには、この情報が含まれていることを確認します。
10084 JWT_PARSE_ERROR JWT に問題が含まれています この問題を解決するには、次を確認します。
  • この JWT で参照される 'aud' (オーディエンス) 値が "tableau" 値を使用していることを確認します。この値は大文字と小文字が区別されます。
  • 'aud' (オーディエンス) と 'sub' (サブジェクト) は JWT に含まれています。
10085 COULD_NOT_FETCH_JWT_KEYS JWT がキーを見つけることができませんでした シークレットを見つけることができませんでした。

この問題を解決するには、正しい発行元が呼び出されていることを確認します。

10087 BLOCKLISTED_JWS_ALGORITHM_USED_TO_SIGN JWT 署名アルゴリズムの問題 この問題を解決するには、署名アルゴリズムを削除します。
10088 RSA_KEY_SIZE_INVALID JWT 署名要件の問題 この問題を解決するには、EAS または IdP を使用して、JWT が 2048 ビットの RSA キー サイズで署名されていることを確認します。
10091 JTI_ALREADY_USED 一意の JWT が必要です JWT はすでに認証プロセスで使用されています。この問題を解決するには、EAS または IdP が新しい JWT を生成する必要があります。
10092 NOT_IN_DOMAIN_ALLOW_LIST 埋め込みコンテンツのドメインが指定されていません この問題を解決するには、設定 unrestrictedEmbeddingtrue に設定されていること、または domainAllowlist パラメーターに、Tableau REST API の「サイトの埋め込み設定の更新(新しいウィンドウでリンクが開く)」メソッドを使用して Tableau コンテンツを埋め込むドメインが含まれていることを確認してください。
10094 MISSING_REQUIRED_JTI JWT ID がありません この問題を解決するには、'jti' (JWT ID) が JWT に含まれていることを確認します。
10095 EXTERNAL_AUTHZ_SERVER_DISABLED EAS が無効です サイトに登録されている EAS の接続済みアプリが無効になっています。
10096 JWT_EXPIRATION_EXCEEDS_CONFIGURED_EXPIRATION_PERIOD   'exp' (有効期限) が既定の最大有効期間を超えています。この問題を解決するには、有効な JWT に必要な登録済みのクレーム(新しいウィンドウでリンクが開く)を確認し、正しい値が 10 分を超えないようにします。
10097 SCOPES_MALFORMED スコープ クレームに関する問題 このエラーは、'scp' (スコープ) クレームが JWT にないか、リスト型として渡されていない場合に発生する可能性があります。この問題を解決するには、'scp' が JWT に含まれ、リスト型として渡されていることを確認します。JWT に関するトラブルシューティングのヘルプについては、auth0 サイトの「デバッガー(新しいウィンドウでリンクが開く)」を参照してください。
10098 JWT_UNSIGNED_OR_ENCRYPTED JWT が署名されていないか、暗号化されています Tableau は、署名されていない JWT または暗号化された JWT をサポートしていません。
10099 SCOPES_MISSING_IN_JWT スコープのクレームがありません JWT に必要な 'scp' (スコープ) クレームがありません。この問題を解決するには、'scp' が JWT に含まれていることを確認します。JWT に関するトラブルシューティングのヘルプについては、auth0 サイトの「デバッガー(新しいウィンドウでリンクが開く)」を参照してください。
10100 JTI_PERSISTENCE_FAILED 予期しない JWT ID エラー 'jti' (JWT ID) で予期しないエラーが発生しました。この問題を解決するには、新しい 'jti' で新しい JWT を生成する必要があります。
10101 EPHEMERAL_USER_LOGIN_FAILED_SITE_NOT_UBP_ENABLED オンデマンド アクセスがサポートされていません このサイトには、オンデマンド アクセスを有効にするために必要な埋め込み分析の使用ベースのライセンスが設定されていません。詳細については、ライセンス モデルを理解するを参照してください。
10102 EPHEMERAL_USER_NOT_SUPPORTED iframe-auth 属性が有効になっている場合、オンデマンド アクセスはサポートされません iframe-auth 属性が有効になっている場合、このエラーが発生する可能性があります。この問題を解決するには、Tableau 埋め込み API バージョン 3.6 以降が使用されていることを確認してください。
10103 JWT_MAX_SIZE_EXCEEDED JWT が最大サイズを超えています JWT サイズが 8000 バイトを超えている場合、このエラーが発生する可能性があります。この問題を解決するには、必要なクレームのみが Tableau Cloud に渡されていることを確認してください。
10113 EPHEMERAL_USER_LOGIN_FAILED_SITE_NOT_ENTITLED_FOR_ODA_ACCESS オンデマンド アクセスがサポートされていません このサイトは埋め込み分析の使用量ベースのモデルでライセンスされていないか、オンデマンド アクセスに必要な容量ベースの Viewer ブロックが Cloud+ または Tableau+ のエディションで有効になっていません。詳細については、使用量ベースのライセンス モデルまたは容量ベースのライセンス モデルを参照してください。
フィードバックをお送りいただき、ありがとうございます。フィードバックは正常に送信されました。ありがとうございます!