作为 Tableau Server 管理员,您可以注册外部授权服务器 (EAS) 以在 Tableau Server 和 EAS 之间建立信任关系。通过建立信任关系,您可以通过您已为 Tableau Server 配置的身份提供程序 (IdP),针对嵌入到您的自定义应用程序中的 Tableau 内容为您的用户提供单点登录 (SSO) 体验。在自定义应用程序中加载嵌入的 Tableau 内容时,将使用标准 OAuth 流程。用户成功登录到其 IdP 后,将会自动登录到 Tableau Server。

按照下面描述的步骤将您的 EAS 注册到 Tableau Server。

重要信息:本主题中的某些过程需要使用第三方软件和服务进行配置。我们已尽最大努力验证用于在 Tableau Server 上启用 EAS 功能的过程。但是,第三方软件和服务可能会发生变化,或者您的组织可能会有所不同。如果遇到问题,请参考第三方文档以获得权威的配置详细信息和支持。

步骤 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命令进行配置。
“sub”(使用者) 经过身份验证的用户的 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 Server 中配置的用户权限,并允许用户与嵌入视图中的工具进行交互(如果在原始视图中可用)。
  • 我们建议嵌入代码排除工具栏参数。有关详细信息,请参见下面的已知问题

注意:上述 JWT 声明记录在 Internet 工程任务组 (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 标头中缺少“secret key”(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。

感谢您的反馈!