如果您为 Looker 内容使用签名嵌入,则排查身份验证错误可能会比较困难。您可以采取几种不同的方法来尝试诊断问题,并根据重定向将用户发送到的位置来选择相应的方法。除非另有说明,否则本页上的提示假定您使用的是与 Looker 的嵌入示例 GitHub 代码库中的脚本类似的脚本来生成已签名的嵌入网址。
首先可以尝试的常规操作
在开始嵌入之前,请确保您已在管理面板中生成嵌入密钥,并且嵌入的内容在生产模式下(而不仅仅是在开发模式下)可以正常运行。
如果您拥有管理员权限,请以嵌入用户的身份运行 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 支持以提交支持请求。