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

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

  • 限制存取可以內嵌的內如,以及可以內嵌該內容的位置
  • 可讓使用者使用單一登入 (SSO) 存取內嵌內容,而無需與身分識別提供者 (IdP) 進行整合
  • 可讓使用者直接從外部應用程式進行驗證
  • 以編程方式代表使用者透過 JSON Web 權杖 (JWT) 授權存取該 Tableau REST API(及從 2023 年開始的 Tableau Cloud

已連線應用程式的工作原理

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

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

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

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

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

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

連線的工作流程

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

  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. 在「建立已連線應用程式」對話方塊中,執行以下動作之一:
    1. 如果是 REST API 授權工作流程(包括使用 REST API 授權的中繼資料 API 工作流程),請在已連線應用程式名稱文本方塊中輸入已連線應用程式的名稱,然後按一下「建立」按鈕。

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

    2. 如果是嵌入工作流程,請執行以下動作:

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

        附註: 

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

      4. 完成後,按一下建立按鈕。

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

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

步驟 2:產生密碼

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

  1. 在步驟 1 中建立的已連線應用程式的詳細資訊頁面上,按一下產生新密碼按鈕。

  2. 記下密碼 ID 和密碼值,以在下面的步驟 3 中使用。

步驟 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

    https://tableau.com/oda隨需存取 - 宣告(啟用功能)僅用於內嵌工作流程

    值必須是「true」並且必須指定一或多個 Tableau Cloud 群組(請參見下一列)。有關詳情,請參閱以下按需存取(僅限嵌入工作流程)區段。

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

    值必須與 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")
		.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"],
		"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 登入請求。有關詳細資訊,請參閱已連線應用程式的存取範圍

管理已連線應用程式

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

  1. 請作為站台管理員登入 Tableau Cloud

  2. 從左窗格中,選取設定 > 已連線應用程式

  3. 選中要管理的已連線應用程式旁邊的核取方塊,然後執行以下一項或多項動作:

    • 根據組織的安全性原則指定的變換時間線產生新密碼。要產生額外的密碼,請按一下已連線應用程式的名稱,然後按一下產生新密碼按鈕。一個已連線應用程式最多可以有兩個密碼。這兩個密碼可以同時處於使用中狀態,不會過期,並且在被刪除之前一直有效。

    • 透過按一下已連線應用程式的名稱檢閱已連線應用程式的詳細資訊,以查看已連線應用程式的建立時間、其 ID、專案和網域範圍及其密碼。

    • 變更專案範圍或網域,在動作功能表中,選取編輯。進行變更並按一下更新

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

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

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

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

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

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

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

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

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

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

關於多個專案

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

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

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

已連線應用程式的網域允許清單可讓您將對內嵌 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 下所有子網域上的所有連接埠安全地存取內嵌內容。
無網域[無網域]已封鎖存取內嵌內容。

按需存取(僅限嵌入工作流程)

從 2023 年 10 月開始,如果您的站台獲得了內嵌分析(連結在新視窗開啟)基於使用模型的授權,可以使用隨需存取將對內嵌 Tableau 內容的存取權限擴展到更多使用者。透過隨需存取,您允許使用者與透過已連線應用程式進行驗證的內嵌 Tableau 內容進行互動,而無需在 Tableau Cloud 站台中設定這些使用者。按需存取使您無需在 Tableau Cloud 中新增與管理使用者即可支援存取嵌入內容。

隨需存取的工作原理

使用按需存取對嵌入式 Tableau 內容的存取由組級權限決定,組級權限要么繼承內容(例如,在專案級別),要么直接套用於內容。站台管理員、專案擁有者或領導者以及內容擁有者等使用者可以為內容分配組級權限。使用者存取隨需存取功能啟用的內嵌內容時,Tableau 會在顯示內容之前驗證 JWT 包含正確的群組成員資格聲明。

必要條件

除上述還必須滿足以下條件才能啟用內嵌內容的隨需存取:

  1. 站台已獲得 內嵌分析(連結在新視窗開啟) 基於使用的模型授權
  2. 為群組啟用按需存取功能
  3. 為 Tableau 內容指定組權限
  4. 已建立 Tableau 連線的應用程式
  5. 連線的應用程式使用的 JWT 包括 https://tableau.com/odahttps://tableau.com/groups 宣告
  6. 將 Tableau 內容嵌入外部應用程式

滿足這些條件後,您的使用者就可以與隨需存取功能啟用的內嵌 Tableau 內容進行互動。

啟用按需存取功能

為了使群組具有按需存取能力,建立或編輯群組時必須勾選「允許按需存取」核取方塊。有關建立群組的更多資訊,請參閱建立群組並向其中新增使用者

您也可以使用 Tableau REST API 啟用此功能。欲了解更多資訊,請參閱 Tableau REST API 說明中的建立群組(連結在新視窗開啟)更新群組(連結在新視窗開啟)方法。

啟用按需存取後的功能

存取嵌入式 Tableau 內容的使用者可以在內容中檢視功能(連結在新視窗開啟)。無論選取的範本或可能為群組設定的自訂功能如何,使用者均有「檢視」功能(例如,具有「Viewer」角色的使用者將永遠無法下載資料來源,即使在具體資料來源中已明確說明授予該使用者此權限)。

監控按需存取

如果使用含有 Advanced Management(連結在新視窗開啟) 的 Tableau Cloud,可以使用活動記錄檔來監視隨需存取的使用情況。活動記錄檔中擷取隨需存取的事件包括但不限於存取檢視登入。有關事件詳情,請參閱活動記錄檔事件類型參考

限制

由於隨需存取工作流程使存取內嵌 Tableau 內容的某些使用者能夠匿名且對 Tableau Cloud 具有暫時性,因此透過隨需存取功能存取內嵌內容的使用者無法使用下列功能:

  • 建立自訂檢視
  • 使用內容的共用按鈕共用內容
  • 訂閱資訊電子郵件快照的內容

附註: 從 2024 年 2 月 (Tableau 2024.1) 開始,Tableau REST API 請求可以以具有隨需存取權限的使用者身分傳出。

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

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

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

    <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 取消了內嵌指標功能。)

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