Tableau Server 版本 2022.1 開始,從已連線 Tableau 的應用程式可透過協助 Tableau Server 站台與內嵌 Tableau 內容的自訂應用程式之間建立明確的信任關係,從而實現無縫且安全的驗證體驗。

已連線應用程式可提供以下功能:

  • 限制存取哪些內容可以內嵌,以及該內容可以內嵌的位置
  • 可讓使用者使用單一登入 (SSO) 存取內嵌內容,而無需與身分識別提供者 (IdP) 進行整合
  • 可讓使用者直接從自訂應用程式進行驗證

附註:

  • 在 Tableau Server 版本 2021.4 中,可透過 Tableau REST API 中的已連線應用程式方法(連結在新視窗開啟)使用無 UI 的已連線應用程式功能。
  • Tableau 已連線應用程式和 Salesforce 已連線應用程式不同,並且提供不同的功能。現在,Tableau 已連線應用程式已針對在自訂應用程式中內嵌 Tableau 檢視和指標進行了最佳化。

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

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

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

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

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

附註:若要透過已連線應用程式啟用內嵌,必須將 Tableau Server 設定為使用 SSL 處理 HTTP 流量。

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

下圖說明了自訂應用程式(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 Server 的「設定」頁面建立已連線應用程式。

  1. 作為伺服器或站台管理員,請登入Tableau Server

  2. 從左側窗格中,選取設定 > 已連線應用程式,然後按一下新建已連線應用程式按鈕。

  3. 在「建立已連線應用程式」對話方塊中,執行以下動作:
    1. 在已連線應用程式名稱文字方塊中,輸入已連線應用程式的名稱。

    2. 在「套用到」下拉式功能表中,選取「所有專案」「僅一個專案」以控制可以內嵌哪些檢視。如果選取「僅一個專案」選項,請選取要確定範圍的具體專案。

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

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

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

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

步驟 2:產生密碼

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

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

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

步驟 3:配置 JWT

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

有效的 JWT 包括以下資訊:

  • 已連線應用程式 ID,也稱為用戶端 ID,來自步驟 1
  • 步驟 2 中產生的密碼 ID 和密碼值

  • 註冊宣告和標頭:

    宣告 說明或所需值
    iss」(簽發者) 必需(在標頭或作為聲明)。唯一簽發者 URI,標識受信任的已連線應用程式及其簽署金鑰。
    alg」(演算法) 必需(在標頭或作為聲明)。JWT 簽署演算法。僅支援 HS256。
    「sub」(主旨) 經過驗證的 Tableau Server 使用者的使用者名稱。
    aud」(對象) 值必須為:「tableau
    exp」(過期時間)

    有效的 JWT 不得到期。JWT 的到期時間必須在配置的最大有效期限內。該可以使用 tsm 的vizportal.oauth.connected_apps.max_expiration_period_in_minutes命令配置最大有效期限。

    jti」(JWT ID) 要求作為聲明。JWT ID 聲明為 JWT 提供唯一識別碼並且區分大小寫。
    scp」(範圍)

    支援的值包括:

    tableau:views:embed
    tableau:metrics:embed

    附註:

    • 值必須作為清單類型傳遞。
    • 對於 tableau:views:embed,範圍尊重已在 Tableau Server 中設定的使用者權限,並允許使用者與內嵌檢視中的工具互動(若工具在原始檢視中可用)。
    • 建議內嵌程式碼排除工具列參數。有關更多資訊,請參閱下面的已知問題

JWT 範例

以下為 Java 和 Python 語言中的 JWT 範例。

Java

String secret = "secretvalue";
	String kid = "connectedAppSecretId";
	String clientId = "connectedAppClientId";
	List<String> scopes = new
ArrayList<>(Arrays.asList("tableau:views:embed"));
	String username = "username";
	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)
		.build();
	SignedJWT signedJWT = new SignedJWT(header, claimsSet);
	signedJWT.sign(signer);
	model.addAttribute("token", signedJWT.serialize());

Python

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"]
	},
		connectedAppSecretKey,
		algorithm = "HS256",
		headers = {
		'kid': connectedAppSecretId,
		'iss': connectedAppClientId
        }
  )

配置 JWT 後,當程式碼由自訂應用程式執行時,其將產生一個權杖。

步驟 4:內嵌後續步驟

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

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

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

管理已連線應用程式

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

  1. 作為伺服器或站台管理員,請登入Tableau Server

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

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

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

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

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

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

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

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

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

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

要透過已連線應用程式向使用者顯示內嵌檢視或指標,則需要啟用已連線應用程式並產生密碼。若自訂應用程式中正在使用已連線應用程式,停用或刪除該已連線應用程式,或刪除或取代其密碼後,使用者在存取內嵌內容時會遇到錯誤。

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

網域允許清單規則

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

網域選項

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

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

網域格式設定

在網域允許清單文字方塊中,可以輸入一個網域、多個網域或不輸入任何網域。網域允許清單尊重 CSP(內容安全性原則)框架的 frame-ancestors 標頭(連結在新視窗開啟)允許的任何格式設定。

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

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

要指定... 範例 內嵌存取
網域範圍 *.myco.com 可以從 myco.com 下的所有子網域存取內嵌內容。
多個離散網域 myco.com
events.myco.com
ops.myco.com
可從所有三個網域存取內嵌內容。
無網域 [無網域] 已封鎖存取內嵌內容。

已知問題

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

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

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

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