作為 Tableau Server 管理員,您可以註冊外部授權伺服器 (EAS) 以在 Tableau Server 和 EAS 之間建立信任關係。建立信任關係後,您可以通過已為 Tableau Server 配置的身分識別提供者 (IdP) 為您的使用者提供單一登入 (SSO) 體驗內嵌至自訂應用程式中的 Tableau 內容。在自訂應用程式中載入內嵌的 Tableau 內容時,將使用標準 OAuth 流程。使用者成功登入到其 IdP 後,將會自動登入到 Tableau Server。

按照下方描述的步驟將您的 EAS 註冊到 Tableau Server。

重要資訊:

  • 本主題中的某些程序需要使用協力廠商軟體和服務進行設定。我們已盡最大努力驗證該程序,並啟用 Tableau Server 的 EAS 功能。但是,第三方軟體和服務可能會發生變化,或者您的組織可能會有所不同。若遇到問題,權威設定細節和支援請參考第三方文件。
  • 若要透過 EAS 啟用內嵌,必須將 Tableau Server 設定為使用 SSL 處理 HTTP 流量。

第 1 步:開始之前

要將 EAS 註冊到 Tableau Server,必須已配置 EAS。此外,EAS 必須傳送包含下表中列出的已註冊宣告和標頭的有效 JSON Web 權杖 (JWT)。

宣告 描述或所需值
iss」(簽發者) 標識受信任 EAS 及其簽章金鑰的唯一簽發者 URI。
alg」(演算法) JWT 簽章演算法。javadoc.io 文件中 Class JWSAlgorithm(連結在新視窗開啟) 頁面中列出了支援的演算法名稱。可以使用 vizportal.oauth.external_authorization_server.blocklisted_jws_algorithms設定簽章演算法。
「索引標籤」(主題) 通過身份驗證使用者的 Tableau Server 使用者名稱。
aud」(觀眾) 值必須是:「tableau
exp」(到期時間) 有效的 JWT 不得到期。JWT 的到期時間必須在配置的最大有效期限內。可以使用 vizportal.oauth.external_authorization_server.max_expiration_period_in_minutes命令配置最大有效期限。
jti」(JWT ID) JWT ID 宣告為 JWT 提供唯一識別碼,並且區分大小寫。
scp」(範圍)

支援的值包括:

tableau:views:embed
tableau:metrics:embed

附註:

  • 值必須作為清單類型傳遞。
  • 對於 tableau:views:embed,該範圍將遵循已在 Tableau 伺服器中設定的使用者權限,並允許使用者與內嵌檢視中的工具進行互動(如果在原始檢視中可用)。
  • 我們建議內嵌程式碼排除工具列參數。有關詳情,請參閱以下的已知問題

附註:上述 JWT 宣告記錄在網際網路工程任務推動小組 (IETF) 組織發佈的文件中已註冊宣告名稱(連結在新視窗開啟)區段。

步驟 2:向 Tableau Server 註冊 EAS

向 Tableau Server 註冊 EAS 後,可以在 EAS 和 Tableau Server 之間建立信任關係。這代表使用者存取內嵌在自訂應用程式中的 Tableau 內容時,他們將被重新導向至使用 IdP 進行身份驗證。EAS 產生身份驗證權杖,該權杖會傳遞給 Tableau Server 進行驗證。在驗證信任關係後,授予使用者對內嵌內容的存取權限。

註冊 EAS 後,信任建立的信任關係適用於 Tableau Server 上的所有站台。

附註:某些 EAS 支援顯示同意對話方塊的選項,該對話方塊要求使用者核准應用程式存取 Tableau 內容。為確保使用者獲得最佳體驗,我們建議將 EAS 配置為代表使用者自動同意自訂應用程式的請求。

  1. 若是 Tableau Server 管理員,請登入到 Tableau 服務管理器 (TSM) Web UI。有關詳情,請參閱登入到 Tableau 服務管理器 Web UI

  2. 巡覽至「使用者身分和存取」>「授權伺服器」,然後執行以下操作:
    1. 選取啟用內嵌內容的 OAuth 存取核取方塊。

    2. 簽發者 URL文字方塊中,貼上 EAS 的簽發者 URL。

    3. 按一下「儲存暫止的變更」按鈕。

  3. 完成後,請執行以下操作:
    1. 在頁面右上角,按一下暫止的變更按鈕。

    2. 在頁面右下角,按一下套用變更並重新啟動按鈕以停止並重新啟動 Tableau Server。

  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

步驟 3:內嵌下一步

將 Tableau Server 配置為使用 EAS 後,必須將內嵌程式碼新增到自訂應用程式。確保在自訂應用程式呼叫的 Web 元件中包含 EAS 產生的有效 JWT,如步驟 1 中所述。

有關內嵌 Tableau 內容的詳細資訊,請參閱以下一或兩項:

附註:為了讓使用者在存取內嵌內容時成功進行身份驗證,必須將瀏覽器配置為允許協力廠商 Cookie 或使用分割存儲空間。Mozilla Firefox 預設啟用分割存儲空間,並且可以在 Google Chrome 瀏覽器上啟用。

已知問題

使用已連線應用程式時存在一些已知問題,這些問題將在未來版本中解決。

  • 工具列功能:內嵌內容定義工具列參數時,並非所有工具列功能都可以使用。要解決此問題,我們建議如下方範例一樣隱藏工具列參數。

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

  • 已發佈資料來源:將不會顯示設定為提示使用者提供資料庫認證的已發佈資料來源。要盡可能解決此問題,我們建議資料來源所有者改為內嵌齊資料庫認證。

疑難排解

當內嵌內容無法在自訂應用程式中顯示時,可以使用瀏覽器的開發人員工具來檢查和識別可能與 Tableau Server 上啟用的 EAS 功能相關聯的錯誤代碼。

請參閱下表以查看錯誤代碼和潛在解決方案的說明。

錯誤程式碼 彙總 說明 潛在的解決方案或解釋
5 SYSTEM_USER_NOT_FOUND 找不到 Tableau 使用者 要解決此問題,請驗證 JWT 中的「sub」(主題)宣告值為 Tableau Server 的「使用者名稱」。此值區分大小寫。
16 LOGIN_FAILED 登入失敗 此錯誤通常是由 JWT 中的以下宣告問題之一引起的:
10081 COULD_NOT_RETRIEVE_IDP_METADATA 缺少 EAS 元中繼資料端點 要解決此問題,請驗證 EAS 配置正確並且呼叫正確的簽發者。
10082 AUTHORIZATION_SERVER_ISSUER_NOT_SPECIFIED 缺少簽發者 要解決此問題,請驗證呼叫的是正確的簽發者。要變更簽發者 URL,可以使用 vizportal.oauth.external_authorization_server.issuer命令。
10083 BAD_JWT JWT 標頭含有問題 此錯誤通常是由 JWT 標頭的以下問題之一引起的:
  • JWT 標頭中缺少「密碼金鑰」(Kid)或「clientId」(簽發者)宣告。要解決此問題,請確保包含此資訊。
  • JWT 未簽章或加密。Tableau 不支援未簽章或加密的 JWT。
10084 JWT_PARSE_ERROR JWT 含有問題

要解決此問題,請驗證以下內容:

  • JWT 中引用的「aud」(受眾)值使用「tableau」值。此值區分大小寫。
  • 「aud」(受眾)、「sub」(主體)、「jti」(JWT ID)都包含在 JWT 中。
10085 COULD_NOT_FETCH_JWT_KEYS JWT 找不到金鑰

找不到密碼。

要解決此問題,請驗證呼叫的是正確的簽發者。要變更簽發者 URL,可以使用 vizportal.oauth.external_authorization_server.issuer命令。

10087 BLOCKLISTED_JWS_ALGORITHM_USED_TO_SIGN JWT 簽章演算法的問題

要解決此問題,可以移除簽章演算法。有關詳情,請參閱 vizportal.oauth.external_authorization_server.blocklisted_jws_algorithms

10088 RSA_KEY_SIZE_INVALID JWT 簽章要求問題 要解決此問題,請使用 EAS 或 IdP 驗證 JWT 是否使用大小為 2048 的 RSA 金鑰進行簽章。
10091 JTI_ALREADY_USED 需要唯一的 JWT

JWT 已經用於身份驗證過程。要解決此問題,EAS 或 IdP 必須產生新的 JWT。

感謝您的意見回饋!