当您为 Looker 内容使用已签名嵌入时,排查身份验证错误可能很困难。您可以采用几种不同的方法来尝试诊断问题,具体取决于重定向将用户定向到何处。除非另有说明,否则本页中的提示假定您使用与 Looker 的“嵌入示例”GitHub 代码库中类似的脚本生成已签名的嵌入网址。
建议优先尝试的常规操作
在开始嵌入之前,请确保您已在管理面板中生成了嵌入 Secret,并且嵌入的内容在生产模式(而不仅仅是在开发模式)下可正常运行。
如果您拥有管理员权限,请以嵌入用户身份 sudo 检查您的内容是否正常运行。如果您收到 Oops, we can't find that page
错误,则问题很可能是权限或内容访问方面的问题,与身份验证问题无关。如果嵌入用户未显示在 Looker 管理面板的用户页面中,则表示该用户尚未创建,并且嵌入网址失败。您可以尝试使用本页面列出的一些建议和资源来排查问题。
如果您的实例是自托管的,请确保客户端服务器可以访问 Looker 服务器;如果客户端和服务器之间的数据通过公共互联网传输,请确保使用 SSL (HTTPS)。
本页的其余部分介绍了您可能会遇到的错误和其他问题,以及解决这些问题的步骤。
系统会将我重定向到登录页面或“单点登录失败”页面
如果您被重定向到登录页面或显示错误 Single sign on failure. Please contact an adinistrator.
的页面,则通常表示已签名的嵌入身份验证无法正常运行。
首先,生成新的已签名嵌入网址,然后在 Looker 管理面板的嵌入页面下的嵌入 URI 验证器中对其进行测试。嵌入 URI 验证器有时可以提供有关您遇到错误的原因的有价值的信息。
嵌入 URI 验证器是否按预期显示?
如果您位于 Looker 管理面板的嵌入页面,但该页面上未显示“嵌入 URI 验证器”,则表示尚未启用已签名嵌入。您需要启用已签名嵌入。
我收到了 'signature param' failed to authenticate
错误
如果您看到此错误,则表示脚本生成的签名无法正常运行。如需了解可能的解决方案,请参阅以下部分:
嵌入密钥是否匹配?
Looker 实例中的嵌入密钥应与已签名嵌入网址生成脚本中的已签名嵌入密钥相同。如果您不确定是否如此,请选择重置密钥以生成新的密钥,并将其添加到脚本中。重置密钥会破坏使用旧密钥的所有嵌入。
尝试使用Create Signed Embed Url
端点创建嵌入网址,在调用的正文中为secret_id
在脚本中指定密钥。系统会通过响应告知您所用的密钥是否无效。
签名字符串的顺序是否正确?
签名字符串中的嵌入参数必须在网址生成脚本中按正确的顺序排列。已签名嵌入文档页面上记录了正确的顺序。
签名字符串在编码之前输出时应如下所示:
company_name.looker.com /login/embed/embed%2Fdashboards%2F123 "ac786cbc06162b1edde3a8b35920a93e" 15852443573600 "test_external_user_id" ["access_data","see_user_dashboards"] ["test_model"] [] "test group space" {"test_user_attribute":"yes"} {}
使用嵌入密钥对签名字符串进行签名后,请确保最终到达网址中的参数与签名字符串中指定的参数一致。确保在网址参数中对 +
和 /
等特殊字符进行编码(例如,如果未正确编码,+
可能会被解读为空格),并且签名嵌入网址中没有任何换行符,因为编码后系统可能会忽略换行符。
将您的脚本与我们的脚本示例进行比较,检查您的脚本是否执行了所有正确的步骤,以及签名是否使用了正确的加密方式。
我收到了 This request includes invalid params: ["embed_domain"]
错误
在开始排查此错误之前,请注意,只有当脚本使用 JavaScript 事件监听器时,才需要 embed_domain
参数,而基本已签名嵌入实现通常不需要该参数。如果您的应用不需要监听 JavaScript 事件,最简单的方法就是完全移除 embed_domain
参数。
如果您确实需要在嵌入式应用中使用 JavaScript 事件,请检查网址生成脚本,了解 embed_domain
参数的添加位置。此错误通常表示 embed_domain
参数意外地被放置为已签名的嵌入参数,而不是直接放置在 embed_url
中。除非 embed_domain
参数实际上是 embed_url
的一部分,否则脚本将无法正确设置其格式。该参数应添加在嵌入网址之后、任何其他参数之前。
在脚本中正确指定 embed_domain
参数后,应如下所示:
embed_url: "/embed/dashboards/3?embed_domain=https://company.com"
如果您使用的是Create Signed Embed Url
端点,则embed_domain
参数应放在target_url
的末尾。
我收到了 'nonce' param already used this hour
错误
nonce
参数的值不得在同一小时内重复,并且需要少于 255 个字符。因此,如果您测试的是已访问过的网址,就会看到此错误。确保您生成的嵌入网址是尚未在浏览器中加载的新网址,并且 Nonce 会发生变化,不会重复使用。
系统会将我重定向到 Uh-Oh, Something went wrong
错误页面
如果您看到此错误,请与 Looker 支持团队联系,以便他们帮助您诊断问题。
我被重定向到了显示 401 错误消息的页面You are not authenticated to view this page.
如果您已尝试所有适用的问题排查步骤,但 401 问题仍然存在,则说明您的浏览器可能屏蔽了第三方 Cookie。大多数浏览器的限制越来越严格,默认会采用会屏蔽这些 Cookie 的 Cookie 政策。例如,Safari 的阻止跨网站跟踪设置和 Chrome 的在无痕式窗口中阻止第三方 Cookie 设置均默认处于启用状态。
如果您的应用嵌入了 Looker 内容,并且 Looker 实例的域名以 company.looker.com
结尾,则除非修改浏览器的 Cookie 隐私设置,否则浏览器不会跨域对嵌入的 iframe 进行身份验证。
Looker 托管的实例
如果 Looker 托管的管理员不希望用户在浏览器中手动启用第三方 Cookie,则需要更改 Looker 托管实例的域名。例如,Looker 托管的实例通常采用 https://<hostname>.<subdomain>.<domain>.com
格式。如果更改 Looker 域名,Looker 将不再被视为第三方网域。请参阅如果我的 Looker 实例的网址发生更改,会出现什么情况?页面了解详情。
如果您有兴趣为 Looker 实例添加自定义网域,请与 Looker 支持团队联系,以设置必要的 DNS 配置。
自行托管的实例
如果您自行托管 Looker 实例,请更改 Looker 实例的 DNS 条目,确保使用已签名嵌入的应用与 Looker 实例位于同一基础网域中。
Chrome 还要求任何带有 samesite=none
标志的会话 Cookie 都应指定 secure
。如果未为 Looker 实例提供 --ssl-provided-externally-by=<s>
启动标志,Looker 将不会发送 secure
信号,因此请确保已配置此启动标志。
我仍然遇到问题,现在该怎么办?
如果您在尝试本页面上的建议后仍遇到问题,请与您的 Looker 联系人联系,或访问 Looker 支持页面创建工单。