受信任的身份验证
- 版本 :2022.1 及更高版本
将 Tableau Server 视图嵌入到网页中时,访问该页面的所有用户都必须是 Tableau Server 上的许可用户。用户访问该页面时,将会看到先登录到 Tableau Server 中才能查看视图的提示。
将 Tableau Server 视图嵌入到网页中时,访问该页面的所有用户都必须是 Tableau Server 上的许可用户。用户访问该页面时,将会看到先登录到 Tableau Server 中才能查看视图的提示。如果您已经有一种在该网页上或 Web 应用程序中对用户进行身份验证的方法,就可以通过设置受信任的身份验证来避免此提示,并避免您的用户必须登录两次。
受信任的身份验证意味着您已在 Tableau Server 与一个或多个 Web 服务器之间建立受信任的关系。当 Tableau Server 接收来自这些受信任 Web 服务器的请求时,它会假设您的 Web 服务器已处理必需的身份验证。
如果您的 Web 服务器使用 SSPI(安全支持提供程序接口),则无需设置受信任的身份验证。您可以嵌入视图,这样,只要您的用户是 Tableau Server 许可用户且是您Active Directory 的成员,就可以安全地访问这些视图。
注意: 如果想要将受信任的身份验证与嵌入式视图配合使用,则必须将客户端浏览器配置为允许第三方 cookie。
受信任的身份验证的工作原理
下图说明了受信任的身份验证在客户端的 Web 浏览器、您的 Web 服务器和 Tableau Server 之间是如何工作的。
用户访问网页:当用户访问具有嵌入式 Tableau Server 视图的网页时,该网页会向您的 Web 服务器发送一个 GET 请求,要求提供该网页的 HTML。
Web 服务器 POST 到 Tableau Server:Web 服务器向受信任的 Tableau Server(例如 https://
,而非 https://
)发送 POST 请求。该 POST 请求必须有一个 username
参数。username
值必须是 Tableau Server 许可用户的用户名。如果 Tableau Server 承载多个站点,且视图在默认站点之外的其他站点上,则 POST 请求还必须包含 target_site
参数。
Tableau Server 创建票证:Tableau Server 检查发送 POST 请求的 Web 服务器的 IP 地址或主机名(上图中的 192.168.1.XXX)。如果 Web 服务器作为受信任主机列出,则 Tableau Server 将以唯一字符串的形式创建一个票证。票证必须在发出后三分钟内兑换。Tableau Server 使用该票证来响应 POST 请求。或者,如果存在错误并且无法创建票证,则 Tableau Server 将使用值 -1
进行响应。服务器必须有 Ipv4 地址。不支持 IPv6 地址。有关详细信息,请参见从 Tableau Server 返回了票证值 -1。
Web 服务器将 URL 传递给浏览器:Web 服务器将为视图构建 URL,并将其插入网页的 HTML 中。票证包括在内(例如,https://
)。Web 服务器将 HTML 传递回客户端的 Web 浏览器。
浏览器从 Tableau Server 请求视图:客户端 Web 浏览器将向 Tableau Server 发送一个 GET 请求,该请求包括带有票证的 URL。
Tableau Server 兑换票证:Tableau Server 兑换票证,创建会话,将用户登录,从 URL 中移除票证,然后将嵌入视图的最终 URL 发送到客户端。
会话允许用户访问他们在登录到服务器后将具有的任何视图。在默认配置中,使用受信任票证进行身份验证的用户的访问权限受限,以致于只有视图可用。他们无法访问工作簿、项目页面或服务器上托管的其他内容。
若要更改此行为,请参见tsm configuration set 选项中的 wgserver.unrestricted_ticket
选项。
如何存储受信任票证?
Tableau Server 使用以下过程将受信任票证存储在 Tableau Server 存储库中:
Tableau Server 生成分为两个部分的票证:第一部分是 Base64 编码的唯一 ID (UUID),第二部分是一个 24 字符的随机密文字符串。
Tableau Server 对密文字符串进行哈希计算,并将其随唯一 ID 一起存储在存储库中。哈希计算采用密文字符串作为输入,并使用一种算法来计算唯一字符串。这个唯一字符串可保护密文字符串的安全性,防止被未授权用户获取。
Tableau Server 将 Base64 UUID 和原始 24 字符随机字符串发送到客户端。
客户端将 Base64 UUID 和原始 24 字符密文字符串作为视图请求的一部分返回到 Tableau Server。
Tableau Server 使用 Base64 UUID 查找字符串对,然后对密文字符串进行哈希处理,验证其是否与存储库中存储的哈希值匹配。
此过程确保 Tableau Server 上存储的任何受信任票证无法用于模拟用户或访问受身份验证保护的内容。但是,由于完全受信任票证是通过 HTTP 在 Tableau Server 和客户端之间发送的,因此该过程依赖于安全加密的 HTTP 数据传输。因此,我们建议您仅通过 SSL/TLS 或另一层网络加密来部署受信任票证。
此部分中的其他文章
设置受信任的身份验证的第一步是将 Tableau Server 配置为识别并信任来自一个或多个 Web 服务器的请求:
在浏览器中打开 TSM:
https://<服务器名称>:8850.有关详细信息,请参见登录到 Tableau 服务管理器 Web UI。
在“配置”选项卡上单击“用户身份和访问”,然后单击“受信任的身份验证”。
在“受信任的身份验证”下,为每个受信任的主机输入名称或 IP 地址,然后单击“添加”:
注意:
您指定的值将完全覆盖任何以前的设置。因此,如果要修改现有列表,您必须包括主机的完整列表。
必须指定静态 IP 地址:指定的 Web 服务器必须使用静态 IP 地址,即使您使用主机名也一样。
如果请求受信任票证的计算机(上面的步骤 2 中配置的计算机之一,如受信任的身份验证中所示)和 Tableau Server 之间有一个或多个代理服务器,则还需要使用tsm configuration set gateway.trusted
选项将这些代理服务器添加为受信任网关。请参见针对 Tableau Server 配置代理了解相关步骤。在“令牌长度”中输入一个值(可选)。
令牌长度确定每个受信任票证中的字符数。默认设置(24 个字符)提供 144 位随机性。该值可设置为 9 和 255(包括 9 和 255)之间的任意整数。
输入配置信息后,单击“保存待处理的更改”。
单击页面顶部的“待定更改”:
单击“应用更改并重新启动”。
接下来,您需要配置 Web 服务器以便从 Tableau Server 接收票证。
在向 Tableau Server 添加受信任的 IP 地址之后,您就可以将 Web 服务器配置为通过 POST 请求从 Tableau Server 获取票证(图中的步骤 2)。POST 请求必须发送至 http://
。例如,POST 请求必须发送至 http://tabserv/trusted
而非 http://tabserv
。
注意: 如果启用 SSL,则必须使用 https 而不是 http。例如: https://tabserv/trusted
。
下面是可在向 Tableau Server 发送的 POST 请求中使用的数据:
username=
(必需):Tableau Server 许可用户的用户名。如果使用的是本地身份验证,则用户名可以是简单字符串(例如,username=jsmith
)。如果将 Active Directory 用于多个域,则用户名中必须包含域名(例如,username=MyCo\jsmith
)。target_site=
(如果视图不在默认站点上,则为必需):如果 Tableau Server 运行多个站点,并且视图位于默认站点之外的其他站点上(例如,target_site=Sales
),则指定包含该视图的站点。用于的值应为创建该站点时提供的站点 ID。此值区分大小写。如果站点 ID 为
SAles
,则target_site=SAles
。client_ip=
(可选):用于指定 Web 浏览器要访问该视图的计算机的 IP 地址(例如,client_ip=123.45.67.891
)。该地址不是发出 Tableau Server 的 POST 请求的 Web 服务器 IP 地址。如果您决定使用此参数,请参见可选:配置客户端 IP 匹配以了解更多信息。
Tableau Server 对 POST 请求的响应将是一个唯一字符串(即票证)。如果 Tableau Server 无法处理该请求,则返回 -1
。有关如何更正此问题的提示,请参见从 Tableau Server 返回了票证值 -1。同样,为了让用户在单击嵌入视图时成功进行身份验证,其服务器必须配置为允许第三方 Cookie。
Tableau Server 10.2 中的票证格式已更改。票证格式现在是由两个部分组成的字符串。每个部分都是一个 128 位字符串,该字符串在返回到客户端之前将进行编码。第一部分是一个 Base64 编码的全局唯一 ID (UUID v4)。第二部分是一个 24 字符安全随机字符串。这两个部分的级联表示形式为 Base64(UUIDv4):SecureRandomString。票证的示例可能如下所示:9D1ObyqDQmSIOyQpKdy4Sw==:dg62gCsSE0QRArXNTOp6mlJ5
。
接下来,您需要添加一段代码以允许 Web 服务器为该视图构造 URL,此 URL 应包含该视图的位置以及票证。
在创建 POST 请求之后,您需要编写一段代码,以便向 Web 服务器提供来自 Tableau Server 的视图位置和票证。服务器将使用此信息来显示视图。如何指定取决于视图是否为嵌入式视图以及 Tableau Server 是否运行多个站点。
Tableau Server 视图示例
下面是如何指定用户仅通过 Tableau Server 访问的视图的示例(该视图不是嵌入式视图)。
http://<server_name>/trusted/<unique_ticket>/views/<workbook_name>/<view_name>
如果 Tableau Server 正在运行多个站点,并且该视图位于 Default 站点之外的其他站点上,则需要向该路径添加 t/
。例如:
http://<server_name/trusted/<unique_ticket>/t/Sales/views/<workbook_name>/<view_name>
使用在 Tableau Server URL 中看到的相同大小写形式。
嵌入式视图示例
下面是如何指定嵌入式视图的示例。您可采用两种方法来编写嵌入代码,下面便提供了这两种方法。不管使用哪种方法,您必须提供受信任的身份验证所特有的一些信息。有关详细信息,请参见“编写嵌入式代码”。
注意:下面的示例使用嵌入式代码参数。有关详细信息,请参见 Tableau 帮助中的嵌入式代码参数。
脚本标记示例
此示例使用 ticket
对象参数:
<script type="text/javascript" src="http://myserver/javascripts/api/viz_v1.js"></script> <object class="tableauViz" width="800" height="600" style="display:none;"> <param name="name" value="MyCoSales/SalesScoreCard" /> <param name="ticket" value="9D1ObyqDQmSIOyQpKdy4Sw==:dg62gCsSE0QRArXNTOp6mlJ5" /> </object>
对于多站点 Tableau Server,以上示例为以下内容(视图是在 Sales
站点上发布的):
<script type="text/javascript" src="http://myserver/javascripts/api/viz_v1.js"></script> <object class="tableauViz" width="800" height="600" style="display:none;"> <param name="site_root" value="/t/Sales" /> <param name="name" value="MyCoSales/SalesScoreCard" /> <param name="ticket" value="9D1ObyqDQmSIOyQpKdy4Sw==:dg62gCsSE0QRArXNTOp6mlJ5" /> </object>
您可以使用 path
参数显式声明视图的完整路径,而不是使用 ticket
。使用 path
时,也不需要 name
参数,此参数在 Tableau JavaScript 嵌入代码中通常是必需参数。
<script type="text/javascript" src="http://myserver/javascripts/api/viz_v1.js"></script> <object class="tableauViz" width="900" height="700" style="display:none;"> <param name="path" value="trusted/9D1ObyqDQmSIOyQpKdy4Sw==:dg62gCsSE0QRArXNTOp6mlJ5/views/MyCoSales/SalesScoreCard" /> </object>
下面是同一示例,但这次针对的是多站点服务器。请注意,此处使用的是 /t/
:
<script type="text/javascript" src="http://myserver/javascripts/api/viz_v1.js"></script> <object class="tableauViz" width="900" height="700" style="display:none;"> <param name="path" value="trusted/9D1ObyqDQmSIOyQpKdy4Sw==:dg62gCsSE0QRArXNTOp6mlJ5/t/Sales/views/MyCoSales/SalesScoreCard" /> </object>
Iframe 标记示例
<iframe src="http://tabserver/trusted/9D1ObyqDQmSIOyQpKdy4Sw==:dg62gCsSE0QRArXNTOp6mlJ5/views/workbookQ4/SalesQ4?:embed=yes" width="800" height="600"></iframe>
默认情况下,Tableau Server 在创建或兑换票证时不考虑客户端 Web 浏览器的 IP 地址。若要对此进行更改,需要执行以下两个操作:在获取票证的 POST 请求中,使用 client_ip
参数指定一个 IP 地址,然后执行下面的步骤以配置 Tableau Server,以便强制客户端 IP 地址匹配。
打开 TSM CLI 并键入以下命令:
tsm configuration set -k wgserver.extended_trusted_ip_checking -v true
然后键入以下命令:
tsm pending-changes apply
如果待定更改需要重新启动服务器,
pending-changes apply
命令将显示一个提示,告知您将进行重新启动。即使服务器已停止,此提示也会显示,但在这种情况下不会重新启动。您可以使用--ignore-prompt
选项隐藏提示,但这样做不会改变重新启动行为。如果更改不需要重新启动,则会在不提示的情况下应用更改。有关详细信息,请参阅tsm pending-changes apply。
下面的步骤提供了一种方法,用于测试从 Web 服务器中检索受信任票证的操作。这项简单的测试可以帮助评估 Web 服务器和 Tableau Server 之间的连接,以及是否正确配置了受信任的身份验证。
重要信息:本主题中提供的测试代码在浏览器中运行客户端,以提供快速的可视化验证,证明在 Tableau Server 上正确配置了受信任的身份验证。如果加载 html 页的客户端浏览器不在受信任的 Web 服务器上,则可能需要暂时信任客户端 IP。实际上,您绝不应在受信任的身份验证配置过程中信任客户端 IP 地址。所有受信任的 IP 地址都能够以任何用户(包括管理员)身份请求票证。在生产环境中,所有受信任的身份验证流程都应仅在 Tableau Server 和受信任的 Web 服务器之间运行服务器端。
由于测试在客户端浏览器上运行,因此测试不是生产环境中通信路径的精确副本。成功运行测试后,我们建议您随后使用服务器端 post 请求为用户测试请求票证,以便进行最终验证。
一种替代测试方法是运行受信任的票证生成器来测试您的配置。以下 URL 引用 Tableau 不支持的受信任票证生成器。但是,许多客户都使用生成器来测试其受信任的票证配置:https://github.com/mkannan-tsi/Trusted-Ticket-Generator。
步骤 1:添加测试用户
在 Tableau Server 上创建一个可用于测试受信任票证功能的用户。请参见将用户添加到 Tableau Server。将该用户添加到服务器上的一个站点,并将用户的站点角色设置为“Explorer”。
步骤 2:创建一个测试 HTML 页面
将以下代码粘贴到您保存在从中执行测试的 Tableau Server 计算机上的一个新 .html 文件中。您可以根据喜好更改标签和样式属性。
<html> <head> <title>Trusted Ticket Requester</title> <script type="text/javascript"> function submitForm(){ document.getElementById('form1').action = document.getElementById('server').value + "/trusted"; } </script> <style type="text/css"> .style1 {width: 100%;} .style2 {width: 429px;} #server {width: 254px;} </style> </head> <body> <h3>Trusted Ticketer</h3> <form method="POST" id="form1" onSubmit="submitForm()"> <table class="style1"> <tr> <td class="style2">Username</td> <td><input type="text" name="username" value="" /></td> </tr> <tr> <td class="style2">Server</td> <td><input type="text" id="server" name="server" value="https://" /></td> </tr> <tr> <td class="style2">Client IP (optional)</td> <td><input type="text" id="client_ip" name="client_ip" value="" /></td> </tr> <tr> <td class="style2">Site (leave blank for Default site; otherwise enter the site name)</td> <td><input type="text" id="target_site" name="target_site" value="" /></td> </tr> <tr> <td class="style2"><input type="submit" name="submittable" value="Get Ticket" /></td> <td> </td> </tr> </table> </form> <h4>Be sure to add your IP as a Trusted IP address to the server</h4> </body> </html>
步骤 3:从 Tableau Server 检索受信任票证
以下过程将从 Tableau Server 返回受信任票证。
打开您在上一步中创建的网页。
此操作需要 Javascript,因此 Web 浏览器可能会提示您允许脚本运行。
在文本框中,输入以下内容:
用户名:在步骤 1 中创建的测试用户。
Server(服务器):Tableau Server 的地址,例如,
https://
。客户端 IP(可选):用户计算机的 IP 地址(如果为客户端受信任 IP 匹配配置了 IP 地址)。
站点:测试用户所属 Tableau Server 站点的名称。
单击“获取票证”。将返回以下各项之一:
唯一的票证:受信任票证是一个由 base64 编码 UUID 和 24 字符随机字符串组成的字符串,例如,
9D1OlxmDQmSIOyQpKdy4Sw==:dg62gCsSE0QRArXNTOp6mlJ5
。-1:如果返回了值
-1
,则配置包含错误。请参见从 Tableau Server 返回了票证值 -1。
步骤 4:使用受信任票证测试访问
既然有了票证,您就可以使用它来访问 Tableau Server 上的内容。
使用您在上一步中创建的唯一票证来构造 URL,从而使用受信任票证来验证访问。如果使用单一站点(而不是托管多个站点的服务器)访问 Tableau Server,则 URL 语法不同。
默认站点服务器 URL
https://
非默认站点服务器 URL
https://
URL 中的变量由尖括号(<
和 >
)指明。所有其他语法为文本。
本部分包括您在配置受信任的身份验证时可能会遇到的一些常见问题和错误。
受信任的身份验证错误的常见来源是代理服务器或负载平衡器配置错误。如果您的 Tableau Server 在反向代理服务器或负载平衡器后面运行,请参见将 Tableau Server 配置为使用反向代理服务器和添加负载平衡器。
受信任的身份验证信息写入 ProgramData\Tableau\Tableau Server\data\tabsvc\logs\vizqlserver\vizql-*.log
。
若要将日志记录级别从 info
提高到 debug
,请运行以下命令:
tsm configuration set -k vizqlserver.trustedticket.log_level -v debug tsm pending-changes apply
若要测试受信任的身份验证部署,请参见测试受信任的身份验证。
另请参见
有关特定错误的更多故障排除信息,请参见以下可从本部分中的其他文章中访问的主题:
通过 Web 服务器请求票证
从 Tableau Server 返回了票证值 -1
HTTP 401 – 未授权
HTTP 404 – 未找到文件
无效用户(SharePoint 或 C#)
兑换票证的查看者
尝试从错误的 IP 地址兑换票证
Cookie 限制错误
在多个嵌入式视图之间导航
与服务器通信时出错 (403)
此部分中的其他文章
Tableau Server 在不能将票证作为受信任的身份验证过程的一部分发出时会返回票证值“-1”。在对此方案进行故障排查之前,请确保按受信任的身份验证疑难解答中指定的方式将受信任的身份验证的日志级别设置为 debug
。
此消息的确切原因将写入到以下文件夹内的 vizqlserver_node*-*.log.*
文件中:
ProgramData\Tableau\Tableau Server\data\tabsvc\logs\vizqlserver
以下是需确认的一些内容:
所有 Web 服务器主机名称或 IP 地址都已添加到受信任主机
日志错误“
Invalid request host:
”可能指明发送 POST 请求的计算机的 IP 地址或主机名不在 Tableau Server 上受信任的主机列表中。若要了解如何向此列表添加 IP 地址或主机名称,请参见向 Tableau Server 添加受信任的 IP 地址或主机名称。IP 地址是 IPv4
如果使用 IP 地址指定受信任主机,它们必须采用 Internet 协议版本 4 (IPv4) 格式。IPv4 地址如下所示:123.456.7.890。不支持使用 IPv6 地址(例如 fe12::3c4a:5eab:6789:01c%34)输入受信任主机。
POST 请求中的用户名是有效的 Tableau Server 用户
在 POST 请求中发送的用户名必须是 Tableau Server 许可用户。您可以通过以管理员身份登录到 Tableau Server 来查看用户列表。
以下日志错误指明用户 POST 问题:
POST 请求中的用户名包含域
如果将 Tableau Server 配置为使用本地身份验证,则在 POST 中发送的用户名可以是简单字符串。但是,如果将服务器配置为使用 Active Directory,则必须在用户名中包含域名(域\用户名)。例如,username 参数可能是:
username=dev\jsmith
。此方案的一个常见错误日志是“Invalid user:
”。“
Missing username and/or client_ip
”“
Invalid user:
”“
Unlicensed user is not allowed:
”内容类型已指定
如果您要设计一个 ASP.NET 或 C# 应用程序,则需要在您的 HTTP 请求中声明内容类型。例如:
http.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8")
如果您没有指定内容类型且 Tableau Server 返回 -1,则日志文件包含错误:“
missing username and/or client_ip
”。
如果您收到“401- 未授权”错误,可能是由于以下原因之一导致的:
您可能已将 Tableau Server 配置为将 Active Directory 与 SSPI 结合使用。如果您的 Web 服务器使用 SSPI,则无需设置受信任身体验证。您可以嵌入视图,这样,只要您的用户是 Tableau. Server 许可用户并且是您的 Active Directory 的成员,他们就可以访问这些视图。有关详细信息,请参见tsm authentication sspi。
注意:只能在 Windows 版 Tableau Server 上配置 SSPI。
或者在部署 Tableau Server 2022.1 后看到 302- Redirect 错误,则您编写用以构造客户端 URL 的受信任票证代码可能未针对两部分票证 URL 格式的帐户进行更新。有关详细信息,请参见从 Tableau Server 获取票证。
如果您的程序代码引用不存在的 Tableau Server URL,就可能会收到此错误。例如,您的 Web 服务器可能会构造一个网页尝试检索时找不到的无效 URL。
此错误的另一个原因是,您未输入向 Tableau Server 添加受信任的 IP 地址或主机名称中指定的受信任 Web 服务器。如果已输入受信任的 Web 服务器,请验证 IP 地址或主机名是否正确。
如果您将 Tableau Server 配置为使用受信任的身份验证,则可能会遇到此错误。
SharePoint .dll 的示例代码引用以下 GET 请求:
SPContext.Current.Web.CurrentUser.Name
上面的请求将返回当前 Windows Active Directory 用户的显示名称。如果要使用登录 ID,则需要将代码更改为:
SPContext.Current.Web.CurrentUser.LoginName
进行更改后,请重新编译 SharePoint .dll。
为受信任的身份验证配置 Tableau Server 后,您可能会遇到兑换票证的问题。
当 Tableau Server 配置为强制执行客户端 IP 地址匹配时,可能会出现此问题。因为在兑换票证时默认不考虑客户端网络浏览器 IP 地址,请确保在 POST 请求中发送给 Tableau Server 的客户端 Web 浏览器 IP 地址与浏览器尝试检索嵌入式视图时的 IP 地址相同。
例如,在受信任的身份验证图中,如果步骤 3 中的 POST 请求发送参数 client_ip=74.125.19.147
,则步骤 5 中的 GET 请求必须来自同一 IP 地址。
有关详细信息,请参见可选:配置客户端 IP 匹配,了解如何将 Tableau Server 配置为强制客户端 IP 地址匹配。
用户登录到 Tableau Server 时,会话 Cookie 会存储到他们的本地浏览器中。Tableau Server 利用存储的 Cookie 来保留通过身份验证且可访问服务器的已登录用户。由于 Cookie 设置的域或子域与浏览器地址栏中的域或子域相同,因此该 Cookie 被认定为第一方 Cookie。如果用户浏览器配置为阻止第一方 Cookie,则它们将无法登录到 Tableau Server。
如果用户通过嵌入式视图或在配置了受信任的身份验证的环境中登录到 Tableau Server,则会发生同样的情况:系统会存储此 Cookie。但在这种情况下,浏览器会将此 Cookie 当做第三方 Cookie 来处理。这是由于 Cookie 设置的域与浏览器地址栏中显示的域不同。如果用户 Web 浏览器设置为阻止第三方 Cookie,则此 Cookie 将无法通过 Tableau Server 所需的身份验证。要避免出现这种情况,Web 浏览器必须配置为允许第三方 Cookie。
如果 Tableau Server 配置为使用受信任的身份验证,在浏览器中打开新视图并尝试导航回之前打开的视图时,可能会收到此错误消息。
Tableau Server 通过 tsm configuration set 选项vizqlserver.protect_sessions
(默认情况下设置为 true
)防止未经授权地重用 VizQL 会话。由于 Tableau Server 配置为使用受信任的身份验证,因此您可能不需要这种级别的保护。若要禁用此选项,您可以使用 tsm configuration set 选项 将 vizqlserver.protect_sessions
更改为 false
。