OpenID Connect
- 版本 :2022.1 及更高版本
您可以将 Tableau Server 配置为支持为单点登录 (SSO) 使用 OpenID Connect。OpenID Connect 是一种标准身份验证协议,它使用户能够登录到诸如 Google 等身份提供程序 (IdP)。用户成功登录到其 IdP 后,将会自动登录到 Tableau Server。
您可以将 Tableau Server 配置为支持为单点登录 (SSO) 使用 OpenID Connect。OpenID Connect 是一种标准身份验证协议,它使用户能够登录到诸如 Google 等身份提供程序 (IdP)。用户成功登录到其 IdP 后,将会自动登录到 Tableau Server。
配置 OpenID Connect 的过程包含若干步骤。本节中的主题提供有关将 Tableau Server 与 OpenID Connect 一起使用的一般信息,并提供用于配置 IdP 和 Tableau Server 的顺序。
身份验证概述
本部分介绍向 Tableau Server 进行 OpenID Connect 身份验证的过程。
步骤 1:用户尝试从客户端计算机登录到 Tableau Server。
步骤 2:Tableau Server 将身份验证请求重定向到 IdP 网关。
步骤 3:用户收到凭据提示,并成功向 IdP 进行验证。IdP 做出响应,并将重定向 URL 返回到 Tableau Server。重定向 URL 中包括用户的授权代码。
步骤 4:客户端被重定向到 Tableau Server,并提供授权代码。
步骤 5:Tableau Server 将客户端的授权代码连同其自己的客户端凭据一起提供给 IdP。Tableau Server 也是 IdP 的客户端。此步骤旨在防止假冒或中间人攻击。
步骤 6:IdP 将访问令牌和 ID 令牌返回给 Tableau Server。
JSON Web 令牌 (JWT) 验证:默认情况下,Tableau Server 会对 IdP JWT 执行验证。在发现过程中,Tableau Server 将在 IdP 配置发现文档中检索
jwks_uri
指定的公钥。Tableau Server 将验证 ID 令牌是否过期,并验证 JSON Web 签名 (JWS)、颁发者 (IdP) 和客户端 ID。您可以在 OpenID 文档中详细了解 JWT 进程。10.签名和加密以及 IETF 建议标准 JSON Web 令牌。我们建议一直启用 JWT 验证,除非 Idp 不支持。ID 令牌是用户的一组属性密钥对。该密钥对称为声明。下面是用户的一个示例 IdP 声明:
"sub" : "7gYhRR3HiRRCaRcgvY50ubrtjGQBMJW4rXbpPFpg2cptHP62m2sqowM7G1LwjN5" "email" : "alice@tableau.com", "email_verified" : true, "name" : "Alice Adams", "given_name" : "Alice", "family_name" : "Adams", "phone_number" : "+359 (99) 100200305", "profile" : "https://tableau.com/users/alice"
步骤 7:Tableau Server 从 IdP 声明中识别用户,并完成步骤 1 中的身份验证请求。Tableau Server 通过匹配“sub”(使用者标识符)来确定正确的用户帐户,从而搜索存储在存储库中的用户帐户记录。如果没有用户帐户与 sub 声明值存储在一起,则 Tableau Server 将在存储库中搜索与 IdP 中的“email”匹配的用户名。用户名匹配成功时,Tableau Server 会将对应的 sub 声明写入存储库中的用户记录。可以配置 Tableau Server 以便为此过程使用不同的声明。请参见使用 OpenID Connect 的要求。
步骤 8:Tableau Server 为用户授权。
Tableau Server 如何使用 OpenID Connect
OpenID Connect 是一种灵活的协议,对于服务提供商(本文中为 Tableau Server)和 IdP 之间交换的信息,此协议支持许多选项。以下列表提供了有关 OpenID Connect Tableau Server实现的详细信息。这些详细信息可以帮助您了解所发送和需要的信息类型Tableau Server,以及如何配置 IdP。
Tableau Server 仅支持 OpenID 授权代码流程,如 OpenID Connect 最终规范中所述。
Tableau Server 依赖于使用发现或提供程序 URL 来检索 OpenID 提供程序元数据。或者,您可以将静态发现文档托管在 Tableau Server 上。有关详细信息,请参见针对 OpenID Connect 配置 Tableau Server。
Tableau Server 仅支持 OpenID Connect 规范中指定的
client_secret_jwt
客户端身份验证方法。此外,Tableau Server 仅支持用 RSA 非对称加密来处理 JWT。不过,您可以关闭 JWT 验证。请参见tsm authentication openid。在
id_token
属性的 JOSE 标头中需要 Tableau Serverkid
值。此值与 JWK 集文档中发现的关键字之一匹配,此文档的 URI 由 OpenID 发现文档中的jwks_uri
值指定。即使 JWK 集文档中只有一个关键字,也必须存在kid
值。Tableau Server确实包括 OpenID 支持,支持 JWK
x5c
参数或支持使用 X.509 证书。默认情况下,Tableau Server 会忽略代理设置并将所有 OpenID 请求直接发送到 IdP。
如果 Tableau Server 配置为使用转发代理连接到 Internet,则您必须按照针对 OpenID Connect 配置 Tableau Server中所述进行其他更改。
此部分中的其他文章
本主题介绍将 OpenID Connect 与 Tableau Server 结合使用的要求。
IdP 帐户
您必须对支持 OpenID Connect (OIDC) 协议的身份提供程序 (IdP) 具有访问权限。您还必须拥有 IdP 帐户。许多身份提供程序支持 OpenID Connect。OIDC 协议是一个开放和灵活的标准,因此,并非所有标准实现都是相同的。针对 OIDC 配置 Tableau Server 时,使用您的 IdP。
Google IdP 实施已使用 Tableau Server 进行了广泛测试,并且是这些主题中记录的配置的模型 IdP。
本地身份存储
若要在 Tableau Server 上使用 OpenID Connect ,必须将服务器配置为使用本地身份存储。必须配置服务器,以便在 Tableau Server 上显式创建用户,而不是从外部目录(例如 Active Directory)导入用户。OpenID 不支持使用外部身份存储管理用户。
IdP 声明:映射用户
若要成功登录到 Tableau Server,必须在 OpenID 中配置给定用户,然后将其映射到 Tableau Server 上的用户帐户。OpenID 使用依赖于声明的方法与其他应用程序共享用户帐户属性。声明包括用户帐户属性,例如电子邮件、电话号码、名字等。若要了解 Tableau Server 如何将 IdP 声明映射到用户帐户,请参见身份验证概述。
Tableau Server 依赖于 IdP 声明将 IdP 中的用户帐户映射到 Tableau Server 上托管的用户帐户。默认情况下,Tableau Server 希望 IdP 传递电子邮件声明。根据您的 IdP,您可能需要将 Tableau Server 配置为使用其他 IdP 声明。
如果使用 Google 作为 IdP,则使用默认的 email
声明将 IdP 身份映射到 Tableau Server 用户帐户。如果未使用 Google 作为 IdP,则与您的 IdP 合作来确定应针对其配置 Tableau Server 的声明。
默认值:使用 email 声明来映射用户
默认情况下,Tableau Server 中用户的用户名必须与 IdP ID 令牌中的 email
声明匹配。因此,在默认配置中,您必须使用电子邮件地址(也称为 UPN)作为 Tableau Server 中的用户名。如果使用 Google 作为 IdP,Tableau Server 中的用户名必须是用户的 Gmail 地址 (alice@gmail.com
)。使用完整的电子邮件地址可帮助保证用户名在 Tableau Server 中的唯一性,即使两个用户具有相同的电子邮件但位于不同的电子邮件主机上也是如此。
注意: 在 Tableau Server 中创建用户身份时,您将指定用户名、密码,并根据需要指定电子邮件地址。对于在默认配置中使用 OpenID Connect,用户名(表示为电子邮件地址)是必须与用户在 IdP 中的名称匹配的值。Tableau Server 用户身份中的可选电子邮件地址不用于 OpenID 身份验证。
忽略域名
将 IdP email
声明匹配至 Tableau Server 上的用户帐户时,您可以将 Tableau 配置为忽略电子邮件地址的域部分。在此情形下,IdP 中的 email
声明可能是 alice@example.com
,但此用户将与 Tableau Server 中名为 alice
的用户匹配。如果已在 Tableau Server 中定义了与 email
声明的用户名部分匹配(但与域部分不匹配)的用户,则忽略域名可能很有用。
重要信息:在未采取预防措施的情况下,我们不建议忽略用户域名。具体来说,请验证用户名在您在 IdP 中创建的已配置域中是否唯一。
如果将 Tableau Server 设置为忽略用户域名,则可能会导致意外的用户登录。请考虑为多个域(example.com
和 tableau.com
)配置了您的 IdP 的情况。如果组织中有两个名字相同但用户帐户(alice@tableau.com
和 alice@example.com
)不同的用户,则要完成 OpenID 配置顺序的第一个用户将在 IdP 中声明 sub
映射。如果映射了错误的用户,则另一个用户将无法登录,直到重置关联的 sub
值为止。
若要将 Tableau Server 配置为从 IdP 中忽略用户名中的域名,请将 tsm authentication openid configure --ignore-domain
设置为 true
。有关详细信息,请参见tsm authentication openid。
更改 tsm authentication openid configure --ignore-domain 选项以忽略用户名中的域时,Tableau Server 中的所有用户名都必须有域名。
使用自定义声明映射用户
如身份验证概述中所述,IdP 声明中通常包括 sub
声明。通常,sub
声明是标识给定用户帐户的唯一字符串。使用 sub
声明的好处在于:即使您或其他管理员更新了与该帐户关联的其他用户属性或 IdP 声明(电子邮件、电话号码等),它也不会更改。默认情况下,Tableau Server 依据 IdP ID 令牌中的 sub
声明来识别和验证 OpenID 用户。
必须将 OpenID sub
声明值映射到 Tableau Server 中的对应用户。因为 sub
声明是任意字符串,因此在首次登录会话期间会使用不同的声明来关联帐户。用户首次使用 OpenID 登录到 Tableau Server 时,Tableau 会将 OpenID 用户帐户与 Tableau 上的对应用户帐户匹配。默认情况下,Tableau 将使用 IdP 声明 email
来标识 Tableau 用户。Tableau 随后将使用 OpenID 中的 sub
声明更新该用户的记录。由于 ID 令牌始终随其他令牌一起包括 sub
声明,因此,在后续会话中,Tableau 将仅使用 sub
声明来标识该用户。
对于某些组织,使用电子邮件地址映射用户名不可靠,并且不受 IdP 支持。从 Tableau Server 10.2 开始,您可以将任何 IdP 声明中的用户帐户映射到 Tableau Server 用户名。
您使用的 IdP 声明必须确切映射到对应的 Tableau Server 用户名。在下面的示例中,用户名为 kwilliams
。
若要更改用于在 Tableau Server 上映射身份的 IdP 声明,请使用 tsm authentication openid map-claims --user-name
命令。有关详细信息,请参见tsm authentication openid。
更改 sub
声明
如上所述,sub
声明是 Tableau Server 用于在初始映射会话后标识用户的标识符。sub
声明将写入 Tableau Server 中的对应用户帐户。如果您的 IdP 未提供 sub
声明,则您可以改为指定使用任何声明。像 sub
一样,您指定的声明值必须唯一,并且在其他用户声明更新时不应更改。
若要为默认 sub 声明指定其他 IdP 声明,请使用 tsm authentication openid map-claims --id
命令。有关详细信息,请参见tsm authentication openid。
其中,arbitraryClaim
是要用作 sub
声明替代项的 IdP 声明的名称。
身份验证上下文
如果您的 OpenID Connect IdP 需要特定的身份验证上下文,您可以使用 vizportal.openid.essential_acr_values
和 vizportal.openid.voluntary_acr_values
配置键指定密钥指定基本和自愿 ACR 值列表。有关详细信息,请参见tsm configuration set 选项。
本主题提供有关配置身份提供程序 (IdP) 以将 OpenID Connect 与 Tableau Server 一起使用的信息。这是由多个步骤组成的过程中的一步。以下主题提供有关配置以及将 OpenID Connect 与 Tableau Server 一起使用的信息。
针对 OpenID Connect 配置身份提供程序(此部分)
配置 IdP
您必须具有身份提供程序 (IdP) 帐户以及包含 IdP 的项目或应用程序的帐户,然后才能将 OpenID Connect 与 Tableau Server 一起使用。在配置 Tableau Server 时,您将需要能够提供以下信息:
提供程序客户端 ID。这是 IdP 分配给您的应用程序的标识符。
提供程序客户端密码。这是 Tableau 用于验证来自 IdP 的响应的真实性的令牌。此值是密文,应妥善保管。
提供程序配置 URL。这是 Tableau Server 应向其发送身份验证请求的提供程序站点的 URL。
重定向 URL
对于 Tableau Server,某些 IdP 将需要重定向 URL。您可以使用以下语法为 IdP 手动构建 URL:
例如,https://tableau.example.com/vizportal/api/web/v1/auth/openIdLogin
。
示例 IdP 过程
以下过程概述了您针对提供程序所遵循的步骤。作为示例,该过程论述使用 Google 作为提供程序。但是,每个提供程序都有稍有不同的流程,因此步骤的细节(及步骤顺序)可能因提供程序而异。
在提供程序的开发人员站点处注册并登录。例如,对于 Google,您可以转到位于此 URL 处的开发人员控制台:https://console.developers.google.com
创建一个新项目、应用程序或依赖方帐户。
在开发人员仪表板中,执行用于获取 OAuth 2.0 客户端 ID 和客户端密码的步骤。记录这些值以便稍后使用。
注意:将客户端密码保存在安全的地方。
在开发人员站点上,查找 IdP 用于 OpenID Connect 发现的端点的 URL。例如,Google 使用 URL https://accounts.google.com/.well-known/openid-configuration。记录此 URL 以便稍后使用。
或者,如果 IdP 已为您提供了静态发现文档,请将该文件复制到 Tableau Server 上的本地目录以供稍后使用。
本主题描述如何将 Tableau Server 配置为使用 OpenID Connect 进行单点登录 (SSO)。这是由多个步骤组成的过程中的一步。以下主题提供有关配置以及将 OpenID Connect 与 Tableau Server 一起使用的信息。
针对 OpenID Connect 配置 Tableau Server(此部分)
注意: 在执行此处介绍的步骤之前,您必须配置 OpenID 身份提供程序 (IdP),如 针对 OpenID Connect 配置身份提供程序 中所述。
在浏览器中打开 TSM:
https://
在“配置”选项卡上单击“用户身份和访问”,然后单击“身份验证方法”。
在“身份验证方法”下的下拉菜单中选择“OpenID Connect”。
在“OpenID Connect”下,选择“为服务器启用 OpenID 身份验证”。
输入组织的 OpenID 配置信息:
注意:如果提供程序依赖于本地计算机上托管的配置文件(而不是在公共 URL 处托管的文件),您可以使用 tsm authentication openid 指定文件。使用
--metadata-file
选项指定本地 IdP 配置文件。输入配置信息后,单击“保存待处理的更改”。
单击页面顶部的“待定更改”:
单击“应用更改并重新启动”。
配置 OpenID 以使用转发代理
默认情况下,Tableau Server 会忽略代理设置并将所有 OpenID 请求直接发送到 IdP。
从 Tableau Server 2021.2.2 及更高版本开始,如果 Tableau 配置为使用转发代理连接到 Internet,则您可以将 Tableau Server 配置为使用代理主机和端口设置来联系 OpenID IdP。
您配置 Tableau Server 的方式因您在组织中实施转发代理的方式而异:
在运行 Tableau Server 的 Windows 计算机上配置转发代理。
Tableau Server 将所有出站流量直接发送到组织中运行的转发代理服务器。
Windows系统代理配置
如果您的组织已在每台 Windows 计算机上配置转发代理,请使用此方法为 Tableau Server 上的 OpenID 使用系统代理配置。运行以下命令:
tsm configuration set -k tomcat.useSystemProxies -v true
tsm pending-changes apply
转发代理服务器
使用命令 tsm configuration set 进行更改。
对于 HTTPS 代理主机,请使用以下键值对:
-k tomcat.https.proxyHost -v host.domain
-k tomcat.https.proxyPort -v port_number
例如,如果您的代理服务器位于
https://proxy.example.lan:8443
,则运行以下命令:tsm configuration set -k tomcat.https.proxyHost -v proxy.example.lan
tsm configuration set -k tomcat.https.proxyPort -v 8443
tsm pending-changes apply
对于 HTTP 代理主机,请使用以下键值对:
-k tomcat.http.proxyHost -v host.domain
-k tomcat.http.proxyPort -v port_number
设置这些键后,运行
tsm pending-changes apply
。
本主题提供有关使用 OpenID Connect 登录到 Tableau Server 的信息。以下主题提供有关配置以及将 OpenID Connect 与 Tableau Server 一起使用的信息。
使用 OpenID Connect 登录到 Tableau Server(此部分)
使用 OpenID Connect 登录
将 Tableau Server 配置为使用 OpenID Connect 后,访问服务器并且尚未登录的用户将被重定向到 IdP 站点,将会提示他们在该站点中登录。用户输入他们拥有的 IdP 凭据。在许多情况下,还会要求用户授权 IdP 与 Tableau Server 共享信息,如以下示例中所示:
当用户使用 OpenID Connect 登录时,IdP 将发送唯一用户标识符(在 OpenID 中称为 sub 值)作为重定向到 Tableau Server 的信息的一部分。此 sub 值与用户的 Tableau 用户身份关联。
将命令行工具限制为只能由服务器管理员登录
用于操作 Tableau Server 的命令行工具(tabcmd
、TSM 和 tableau.com
)不支持使用 OpenID Connect 登录。为服务器启用了 OpenID Connect 时,这些工具仍然需要使用 Tableau Server 用户名和密码登录。
即使用户通常使用 OpenID Connect 进行身份验证,每个用户也有 Tableau Server 用户名和密码。这意味着用户可以使用像 tabcmd
这样的命令行工具。作为一项安全措施,您可以确保只有服务器管理员才能使用命令行工具。为此,请使用 tsm configuration set
将 wgserver.authentication.restricted
设置为 true
。此设置为 true
时,只有服务器管理员才能使用用户名和密码登录到 Tableau Server:所有其他用户必须使用像 OpenID Connect 这样的单点登录 (SSO) 选项才能登录到服务器。效果是,不是管理员的用户随后也无法使用命令行工具。若要进行此更改,请按顺序运行以下 TSM 命令:
tsm configuration set -k wgserver.authentication.restricted -v true
tsm pending-changes apply
从 Tableau Server 发送的 OpenID 身份验证请求使用本主题中列出的有限参数集传递信息。如果您的 OpenID IdP 需要不在以下列表中的参数,则它不兼容,因此无法与 Tableau Server 配合使用。
scope
。此值指定一个配置文件,该配置文件告诉 IdP 需要返回的用户信息。此值可由 Tableau Server 管理员配置。默认值为“openid 电子邮件配置文件”。有关详细信息,请参见本文档后面的配置范围值。response_type
。OpenID Connect 支持多个流程。此值告诉 IdP Tableau Server 所需要的流程。Tableau 仅支持授权代码流程,并且值始终设置为“代码”。client_id
。此值指定服务器的 ID(“Tableau Server 配置”对话框中的提供程序客户端 ID),这使 IdP 能够知道请求来自哪里。注册服务时,它由 IdP 提供。此值可由 Tableau Server 管理员配置。redirect_uri
。此值指定使用 OpenID Connect 对用户进行身份验证后 IdP 重定向到的 URL。URL 必须包括主机和协议(例如,http://example.tableau.com
),但 Tableau 会提供 URL 端点。nonce
。Tableau Server 生成一个 nonce 值来验证它所重定向到的客户端是否与从 IdP 中返回的实体匹配。
配置 scope 值
scope
值向 IdP 指明 Tableau Server 所请求的有关用户的信息。默认情况下,Tableau Server 会发送值“openid 电子邮件配置文件”。这表明,Tableau 使用 OpenID 进行身份验证(必须始终包括这部分 scope
属性值),并且 Tableau Server 会在用户授权码交换期间请求用户配置文件和电子邮件信息。
如果此默认范围并不适合您的方案,您可以让 Tableau Server 请求有关用户的自定义信息。为此,您可以使用自定义配置文件配置 IdP(例如,像 "tableau-scope" 这样的内容)。然后,您可以使用自定义配置文件将 Tableau Server 配置为发送请求。
若要更改 Tableau Server 请求的 scope 值,请使用以下 TSM CLI 命令:
tsm authentication openid configure --custom-scope-name custom-scope-name
注意:Tableau Server范围值始终包括 "openid" (即使您未在 custom_scope
设置中包括它也不例外)。
本主题提供有关在配置了 Tableau Server 以使用 OpenID Connect 的情况下更改身份提供程序 (IdP) 的信息。
更改提供程序
您可能决定更改 Tableau Server 已配置使用的 IdP。为此,请遵循您用于配置第一个 IdP 的过程:建立帐户,获取客户 ID 和密码,使用该信息配置 Tableau Server,并向 IdP 提供 Tableau Server 的重定向 URL。有关详细信息,请参见 针对 OpenID Connect 配置 Tableau Server。
但是,您还需要执行一个额外的步骤:您必须清除已与 Tableau Server 用户关联的任何用户标识符(sub
值)。新的 IdP 的每个用户将具有不同的 sub
值,您必须清除现有值,以便 Tableau Server 能够在用户使用新 IdP 登录时存储新的 sub
值。
若要为用户清除 sub 值,请使用 tabcmd reset_openid_sub
命令。您可以为单独的用户重置(即清除)sub
值,如下例中所示:
tabcmd reset_openid_sub --target-username jsmith
也可以使用此命令为所有用户清除 sub 值:
tabcmd reset_openid_sub --all
使用以下主题在 Tableau Server 中排查 OpenID Connect (OIDC) 问题。
许多身份提供程序支持 OpenID Connect 协议。OIDC 协议是一个开放和灵活的标准,因此,并非所有标准实现都是相同的。管理员在为 OIDC 配置 Tableau Server 时遇到的大多数问题是不同身份提供程序实现 OIDC 的结果。如果您在设置 OIDC 以及 Tableau Server 时遇到错误,我们建议您使用 IdP 来解决它们。
启用增强的 OpenID 日志记录
为了有效地解决 Tableau Server 中的 OpenID Connect 问题,请使用以下 TSM 命令将日志记录级别设置为调试,并使用 vizportal.openid.full_server_request_logging_enabled
配置键将 OpenID 的完整日志记录设置为 true
,从而启用增强的日志记录:
tsm configuration set -k vizportal.log.level -v debug
tsm configuration set -k vizportal.openid.full_server_request_logging_enabled -v true
tsm pending-changes apply
完成故障排除后,我们建议将两个配置键的值设置回其默认值,以限制在日志中收集的信息并减少日志文件大小。有关将配置键重置为默认值的详细信息,请参见将配置键重置为默认值。
从命令行登录
即使 Tableau Server 配置为使用 OpenID,但如果您使用 tabcmd、REST API 或 Tableau 数据提取命令行实用工具(随 Tableau Desktop 提供)登录 Tableau Server,也不会使用 OpenID。
登录失败
登录可能会失败,并出现以下消息:
Login failure: Identity Provider authentication successful for user
此错误通常意味着 Tableau Server 中存储的用户名与 IdP 提供的用户名之间存在不匹配。若要修复此错误,请确保这些用户名匹配。例如,如果史珍妮的用户名在 IdP 中存储为 jsmith
,那么它在 Tableau Server 中也必须存储为 jsmith
。
错误 69:"无法登录“
当您尝试使用 Web 浏览器登录并收到错误时,可能会返回错误 69,”无法登录。登录失败。请与 Tableau Server 管理员联系。" 返回此消息的 URL 是 https://example.com/#/error/signin/69?redirectPath=%2
。
如果遇到此错误,请咨询 IDP 提供商,验证 IdP 是否需要 client_secret_post
,而不是 client_secret_basic
(Tableau 默认值)。
如果 IdP 需要 client_secret_post
,则必须将 vizportal.openid.client_authentication
参数设置为 client_secret_post
。
举例来说,如果收到此错误并且已针对 Salesforce IdP 配置了 OIDC,则必须设置 vizportal.openid.client_authentication
参数。
有关详细信息,请参见tsm configuration set 选项。
OpenID 错误日志
OpenID 身份验证在 Tableau Server 外部进行,因此,排查身份验证问题可能很困难。但是,Tableau Server 会记录登录尝试。可以创建日志文件的快照,并使用它们来排查问题。有关详细信息,请参见Tableau Server 日志和日志文件位置。
注意:若要记录 OpenID 相关事件,必须使用tsm configuration set 选项将 vizportal.log.level
设置为 debug
。
在未解压的日志文件快照内的以下文件中,检查 OpenID 错误:
\vizportal\vizportal-