使用直接信任設定已連線應用程式

從 2022 年 1 月初開始,Tableau 已連線應用程式透過促進 Tableau Cloud 站台與外部應用程式之間明確的信任關係來實現無縫且安全的驗證體驗。

附註:為了讓工作階段權杖有效,外部應用程式和託管外部應用程式的伺服器的時鐘必須設定為國際標準時間 (UTC)。若任一時鐘使用不同的標準,則已連線應用程式將不受信任。

Tableau 已連線應用程式如何使用直接信任

Tableau Cloud 站點和外部應用程式之間的信任關係透過 JSON Web 權杖 (JWT) 標準中的驗證權杖建立和進行驗證,該權杖使用由 Tableau 已連線應用程式提供並由外部應用程式簽署的共用密碼。

已連線應用程式的關鍵元件

已連線應用程式的以下元件與外部應用程式中的 JWT 共同作業,以驗證使用者並顯示內嵌的內容。

  • 祕密:祕密是 Tableau 和外部應用程式共用的金鑰。這些密碼會用於構成 JWT 的簽章。使用已連線應用程式進行內嵌驗證或 REST API 驗證時需要密碼。密碼可以在已連線應用程式中建立,不會過期,並且在刪除之前一直有效。
  • 網域允許清單(僅限內嵌工作流程):可以在每個已連線應用程式中指定允許的網域清單。透過已連線應用程式內嵌的 Tableau 內容僅允許在指定的網域下使用。這有助於確保內容在企業保護和核准的網域下公開。
  • 存取層級(僅限內嵌工作流程):可以將已連線應用程式與一個或所有專案相關聯,以指定可以透過已連線應用程式內嵌哪些內容。若指定一個專案,則只能透過已連線應用程式內嵌所選專案中的內容。如果要指定多個專案,則必須使用 Tableau REST API。

已連線應用程式的工作流程

內嵌工作流程

下圖說明了外部應用程式(Web 伺服器和網頁)與 Tableau 已連線應用程式之間如何進行驗證。

圖表,說明網頁、外部應用程式和 Tableau 之間的資料流程。

  1. 使用者瀏覽網頁:使用者瀏覽網頁上的內嵌內容時,網頁向外部應用程式傳送 GET 請求,以檢索該網頁上的 HTML。
  2. 外部應用程式建構驗證權杖:外部應用程式建構 JWT,其中包含來自已連線應用程式的密碼(有關其他的 JWT 要求,請參閱下面的步驟 3)以及使用者對內嵌內容的存取範圍。該密碼由外部應用程式簽署,並作為後續步驟中信任關係的驗證碼使用。
  3. 外部應用程式透過驗證權杖進行回應:外部應用程式透過網頁叫用的內嵌內容 URL 中的 JWT 回應頁面。
  4. 網頁從 Tableau 請求內容:嘗試載入內嵌內容時,網頁叫用內嵌內容的 URL,從而向 Tableau 傳送 GET 請求。
  5. Tableau 驗證權杖:Tableau 接收 JWT 並透過識別已連線應用程式和 JWT 中使用的共用密碼來驗證與外部應用程式的信任關係。然後 Tableau 為使用者建立工作階段。該工作階段不僅遵守 JWT 中定義的內嵌範圍,還遵守已連線應用程式中指定的限制,包括允許的網域和允許的專案。
  6. Tableau 根據受限制的內嵌內容傳回內容:內嵌內容僅在頁面位於允許的網域下並且內容已發佈到允許的專案(若適用)時載入。經過驗證的使用者只能根據 JWT 中定義的範圍與內嵌內容進行互動。

建立已連線應用程式

步驟 1:建立已連線應用程式

Tableau Cloud 的「設定」頁面建立已連線應用程式。

  1. 請作為站台管理員登入 Tableau Cloud
  2. 從左窗格中,選取設定 > 已連線應用程式
  3. 選取「新增已連線應用程式」按鈕下拉箭頭,並選取「直接信任」
  4. 在「建立已連線應用程式」對話方塊中,執行以下動作之一
    • 對於 REST API 授權工作流程(包括使用 REST API 進行驗證的中繼資料 API 工作流程),在「已連線應用程式名稱」文字方塊中輸入已連線應用程式的名稱,然後選取「建立」按鈕。

      附註:在為 REST API 與中繼資料 API 授權書ing已連線應用程式時,可以忽略「存取層級」「網域允許清單」

    • 如果是嵌入工作流程,請執行以下動作:
      1. 在已連線應用程式名稱文字方塊中,輸入已連線應用程式的名稱。
      2. 在「套用到」下拉式功能表中,選取「所有專案」「僅一個專案」以控制可以內嵌哪些檢視。如果選取「僅一個專案」選項,請選取要確定範圍的具體專案。有關這兩個選項的更多資訊,請參閱存取層級(僅限嵌入工作流程)

        附註: 

      3. 在網域允許清單中,使用下面網域格式設定中描述的規則指定網域,以控制可以內嵌檢視或指標的位置。

        重要提示:建議使用網域允許清單作為安全最佳做法,以確保僅在您允許的位置內嵌 Tableau 內容。

      4. 完成後,選取「建立」按鈕。

        建立已連線應用程式的表單,包括應用程式名稱、存取層級和網域允許清單的欄位。

  5. 在已連線應用程式名稱旁邊,選取動作功能表並選取「啟用」。出於安全考慮,預設情況下,已連線應用程式在建立時會設定為停用。

    啟用、編輯或刪除已連線應用程式對話方塊。

  6. 記下已連線應用程式的 ID,也稱為用戶端 ID,以在下面的步驟 3 中使用。

    您的用戶端 ID 和「複製」按鈕。

步驟 2:產生密碼

可以為每個已連線應用程式產生總共兩個密碼。第二個密碼可用於變換密碼,有助於防止在密碼洩露時出現問題。

  1. 在步驟 1 中建立的已連線應用程式的詳細資訊頁面上,選取「產生新密碼」按鈕。
  2. 記下密碼 ID 和密碼值,以在下面的步驟 3 中使用。

    動作的產生日期、ID 和值。

步驟 3:配置 JWT

產生祕密後,您希望可讓外部應用程式傳送有效的 JWT。JWT 是一項標準,用於在兩方之間安全地傳輸資訊。JWT 由外部應用程式簽署,以安全地將資訊傳送到 Tableau Cloud。JWT 會引用已連線應用程式、為其產生工作階段的使用者以及使用者應具有的存取層級。

有效的 JWT 包括以下資訊:

  • 已連線應用程式 ID,也稱為用戶端 ID,來自步驟 1
  • 步驟 2 中產生的密碼 ID 和密碼值
  • 註冊宣告和標頭:
    宣告名稱描述或所需值
    kid密碼 ID必需(在標頭中)。已連線應用程式的祕密金鑰識別碼。
    iss簽發者必需(在標頭中)。唯一簽發者 URI,標識受信任的已連線應用程式及其簽署金鑰。
    alg演算法必需(在標頭中)。JWT 簽署演算法。僅支援 HS256。
    sub主體經過驗證的 Tableau Cloud 使用者的使用者名稱(電子郵件地址)
    aud受眾值必須是:「tableau」。
    exp到期時間有效的 JWT 不得到期。JWT 的到期時間(UTC 時間)必須在最大有效期內,即 10 分鐘。
    jtiJWT ID要求作為聲明。JWT ID 宣告為 JWT 提供唯一識別碼,並且區分大小寫。
    scp

    重要提示:請勿使用「scope」。

    範圍如果是嵌入工作流程,支援的值包括:

    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:embedtableau:views:embed_authoring,該範圍尊重已在 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」並且必須指定一或多個 Tableau Cloud 群組(請參見下一列)。有關更多資訊,包括内嵌分析授權等先決條件,請參閱下面的使用直接信任設定已連線應用程式部分。

    https://tableau.com/groups隨需存取 - 宣告(指定群組名稱)僅用於內嵌工作流程

    值必須與 Tableau Cloud 中的一或多個群組的名稱相符。有關更多資訊,包括内嵌分析授權等先決條件,請參閱下面的使用直接信任設定已連線應用程式部分。

    動態群組成員資格僅用於內嵌工作流程

    值必須與 Tableau Cloud 中的一或多個群組的名稱相符。欲深入了解,請參閱以下使用直接信任設定已連線應用程式一節。

    (使用者屬性)(使用者屬性值)僅用於內嵌工作流程

    可以在 JWT 中包含使用者屬性。然後,在內嵌內容中使用使用者屬性函數時,Tableau 會檢查經過驗證的使用者的內容,並決定哪些資料可以在執行時顯示。

    附註:

JWT 範例

以下為 Java 和 Python 語言中的 JWT 範例。Java 和 Python 範例分別使用 nimbus-jose-jwt 程式庫和 PyJWT 程式庫。

Java

import com.nimbusds.jose.*;
import com.nimbusds.jose.crypto.*;
import com.nimbusds.jwt.*;

import java.util.*;

...

String secret = "secretvalue";
	String kid = "connectedAppSecretId";
	String clientId = "connectedAppClientId";
	List<String> scopes = new
ArrayList<>(Arrays.asList("tableau:views:embed"));
	String username = "user@domain.com";
	JWSSigner signer = new MACSigner(secret);
	JWSHeader header = new
JWSHeader.Builder(JWSAlgorithm.HS256).keyID(kid).customParam("iss", clientId).build();
	JWTClaimsSet claimsSet = new JWTClaimsSet.Builder()
		.issuer(clientId)
		.expirationTime(new Date(new Date().getTime() + 60 * 1000)) //expires in 1 minute
		.jwtID(UUID.randomUUID().toString())
		.audience("tableau")
		.subject("username")
		.claim("scp", scopes)
		.claim("https://tableau.com/oda", "true")
		.claim("https://tableau.com/groups", "Contractors", "Team C", "Group1", "Group2")
		.claim("Region", "East")
		.build();
	SignedJWT signedJWT = new SignedJWT(header, claimsSet);
	signedJWT.sign(signer);
	model.addAttribute("token", signedJWT.serialize());

Python

import jwt

token = jwt.encode(
	{
		"iss": connectedAppClientId,
		"exp": datetime.datetime.utcnow() + datetime.timedelta(minutes=5),
		"jti": str(uuid.uuid4()),
		"aud": "tableau",
		"sub": user,
		"scp": ["tableau:views:embed", "tableau:metrics:embed"],
		        "https://tableau.com/oda":"true",
		        "https://tableau.com/groups": ["Contractors", "Team C", "Group1", "Group2"],
		        "Region": "East"
	},
		connectedAppSecretKey,
		algorithm = "HS256",
		headers = {
		'kid': connectedAppSecretId,
		'iss': connectedAppClientId
        }
  )

設定 JWT 後,當程式碼由外部應用程式執行時,其將產生一個權杖。

步驟 4:後續步驟

對於內嵌工作流程

設定 JWT 後,必須向外部應用程式新增內嵌代碼。確保在外部應用程式叫用的 Web 元件中包含在上述步驟 3 中設定的有效 JWT。

有關內嵌 Tableau 內容和內嵌工作流程支援的功能的詳情,請參閱以下內容:

附註:為了讓使用者在存取內嵌內容時成功進行驗證,必須將瀏覽器設定為允許協力廠商 Cookie。

對於 REST API 授權工作流程

設定 JWT 後,必須將有效的 JWT 新增到 REST API 登入請求以進行授權存取。有關詳細資訊,請參閱已連線應用程式的存取範圍

對於中繼資料 API 工作流程

設定 JWT 後,必須將有效的 JWT 新增至 REST API 登入請求。有關詳細資訊,請參閱已連線應用程式的存取範圍

SCIM 外部權杖工作量流程

設定 JWT 後,必須設定 SAML 驗證並啟用 SCIM 功能。有關更多資訊,請參閱 使用直接信任設定已連線應用程式

管理已連線應用程式

可以在「已連線應用程式」頁面上管理站點的所有已連線應用程式。可以執行建立、刪除和停用已連線應用程式等工作;若現有密碼已洩露,則可撤銷或產生新密碼。

  1. 請作為站台管理員登入 Tableau Cloud
  2. 從左窗格中,選取設定 > 已連線應用程式
  3. 選中要管理的已連線應用程式旁邊的核取方塊,然後執行以下一項或多項動作:
    • 根據組織的安全性原則指定的變換時間表產生新密碼。要產生額外的密碼,請按一下已連線應用程式的名稱,然後按一下產生新密碼按鈕。一個已連線應用程式最多可以有兩個密碼。這兩個密碼可以同時處於使用中狀態,不會過期,並且在被刪除之前一直有效。
    • 透過選取已連線應用程式的名稱檢閱已連線應用程式詳細資訊,以查看已連線應用程式的建立時間、其 ID、專案和網域範圍及其密碼。
    • 變更專案範圍或網域,在動作功能表中,選取編輯。進行變更並選取「更新」

      附註:若變更專案或網域範圍,並且新專案或新網域中不存在內嵌內容,則內嵌檢視或指標無法顯示,使用者在存取內嵌內容時會看到錯誤。

    • 透過選取已連線應用程式的名稱來刪除密碼。在已連線應用程式頁面上,按一下金鑰旁邊的動作並選取刪除。在確認對話方塊中,再次選取刪除

      附註:若外部應用程式正在使用已連線應用程式的密碼,則刪除該密碼後無法顯示內嵌檢視或指標。有關更多資訊,請參閱下方的停用或刪除已連線應用程式或刪除密碼的影響

    • 停用已連線應用程式,在動作功能表中,選取停用。若外部應用程式正在使用某個已連線應用程式,則停用已連線應用程式後無法顯示內嵌檢視或指標。有關更多資訊,請參閱下方的停用或刪除已連線應用程式或刪除密碼的影響

    表單,顯示兩個隨機產生的用戶端程式碼。

停用或刪除已連線應用程式或刪除密碼的影響

要透過已連線應用程式向使用者顯示內嵌內容或者啟用 REST API 存取,則必須啟用已連線應用程式並產生密碼。若外部應用程式中一直使用的已連線應用程式已停用或刪除,或其祕密已被刪除或取代,使用者會遇到 403 錯誤 。

為避免此問題,請確保啟用已連線應用程式,並且 JWT 正在使用正確的密碼 ID 和值。

存取層級(僅限嵌入工作流程)

設定已連線應用程式的存取層級時,可以選取以下兩個專案之一:存取層級控制可以嵌入的內容。

  • 所有專案:此選項啟用所有要嵌入專案中的
  • 只有一個專案: 此選項僅啟用要嵌入的指定專案中的內容。如果指定的專案包含嵌套專案,則不會啟用在這些嵌套專案中嵌入內容。

關於多個專案

從 2024 年 2 月開始 (Tableau 2024.1),您可以僅使用 Tableau REST API 為已倆線應用程式啟用多個專案中的內容。要指定哪些啟用哪些專案,請使用建立已連線應用程式(連結在新視窗開啟)或者更新連接的應用程式(連結在新視窗開啟)方法中的「專案 ID」。

附註:為已連線應用程式設定多個專案時,Tableau 會針對已連線應用程式的存取層級顯示多個專案。如果選取「只有一個專案」或者「所有專案」,並更新已連線應用程序,則不再顯示「多個專案」選項。如果需要再次為多個專案設定已連線應用程序,則必須使用 REST API。

網域允許清單規則(僅限嵌入工作流程)

已連線應用程式的網域允許清單可讓您將對內嵌 Tableau 內容的存取限制為所有網域或某些網域;或排除某些網域或封鎖所有網域。

重要提示:建議使用網域允許清單作為安全最佳做法,以確保僅在您允許的位置內嵌 Tableau 內容。

網域選項

在設定已連線應用程式的網域允許清單時,可以選取以下兩個選項之一:

  • 所有網域:作為預設選項,此選項可啟用對內嵌內容的無限制存取。
  • 僅特定網域:此選項可讓您縮小對內嵌內容的存取範圍。若使用此選項,請遵循以下部分網域格式設定中指定的格式設定規則。

網域格式設定

在網域允許清單文字方塊中,可以使用以下格式範例輸入一或多個網域。

附註:在 Tableau REST API 中使用已連線應用程式方法(連結在新視窗開啟)時,網域格式設定規則同樣適用。

以下是一些基於常見情境的格式設定範例:

要指定...範例內嵌存取
網域範圍*.myco.com可以從 myco.com 下的所有子網域存取內嵌內容。
所有連接埠myco.com:*可以從 myco.com 中的所有連接埠存取內嵌內容。
特定連接埠myco.com:8080僅可以從 myco.com 中的連接埠 8080 存取內嵌內容。
多個離散網域myco.com
events.myco.com
ops.myco.com

可從所有三個網域存取內嵌內容。

附註:指定多個網域時,請逐行輸入每個網域,或使用空格將各個網域分開。對於 REST API,網域必須用空格分隔。

僅保護流量https:無論網域如何,都可以安全地存取內嵌內容。
保護一系列網域的所有連接埠流量https:*myco.com:*可以從 myco.com 下所有子網域上的所有連接埠安全地存取內嵌內容。
無網域[無網域]已封鎖存取內嵌內容。

已知問題(僅限嵌入工作流程)

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

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

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

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

  • 內嵌儀表板中的「資料問答」物件:內嵌儀表板中的「資料問答」物件將不會載入。(在 2024 年 2 月 (Tableau 2024.1) 中,Tableau 已淘汰「資料問答」。

  • 指標和網域允許清單:儘管可能在已連線應用程式的網域允許清單中指定了存取限制,但仍會顯示內嵌指標檢視。附註:從內嵌檢視的工具列中存取的指標資料將按預期工作。(在 2023 年 10 月(Tableau 2023.3),Tableau 已淘汰內嵌指標功能。)

疑難排解

可以參閱對已連線應用程式進行疑難排解 - 直接信任,以瞭解可能與已連線應用程式關聯的錯誤以及建議的疑難排解步驟。

感謝您的意見反應!已成功提交您的意見回饋。謝謝!