签名嵌入是一种向用户呈现私密嵌入的 Look、可视化图表、探索、信息中心或 LookML 信息中心的方式,用户无需登录单独的 Looker。而是通过您自己的应用进行身份验证。
签名嵌入的工作原理是创建一个特殊的 Looker 网址,您将在 iframe 中使用该网址。该网址包含您要分享的信息、用户在您系统中的 ID,以及您希望用户拥有的权限。然后,您需要使用 Looker 提供的密钥对该网址进行签名。
如需了解公开嵌入,请参阅 Look 的公开分享、导入和嵌入文档页面中的使用 iframe 标记进行公开嵌入部分。
您必须先让 Looker 管理员在 Looker 管理控制台中启用签名嵌入并创建嵌入密钥,然后才能在 Looker 实例中使用签名嵌入。如需查看相关说明,请参阅嵌入使用入门 - 启用签名嵌入文档页面。
为签名嵌入提供适当的托管
有些浏览器(例如 Safari 或安装了广告拦截或跟踪 Cookie 拦截扩展程序的浏览器)默认采用拦截第三方 Cookie 的 Cookie 政策。启用不使用 Cookie 的嵌入式功能后,屏蔽第三方 Cookie 的浏览器可以在不同网域的嵌入式 iframe 中对用户进行身份验证。无 Cookie 嵌入身份验证需要进行服务器端配置。如需查看设置示例,请参阅无 Cookie 嵌入文档页面。
如果未启用不使用 Cookie 的嵌入式功能,Looker 会使用 Cookie 进行用户身份验证。在这种情况下,如果浏览器阻止第三方 Cookie,则无法跨网域对嵌入式 iframe 进行身份验证(除非用户修改其浏览器的 Cookie 隐私设置)。例如,如果您想在 https://mycompany.com 上嵌入信息,则需要确保 Looker 共享同一网域,例如 https://analytics.mycompany.com。在这种情况下,如果 Looker 托管您的实例,请与 Looker 支持团队联系,以设置必要的 DNS 配置,从而启用自定义域名。这样,Looker 就可以与嵌入应用共享同一网域,并使用所有浏览器默认接受的第一方 Cookie。
如果您有客户托管的 Looker 实例,请确保将使用签名嵌入的应用与您的 Looker 实例使用相同的网域。
通过封闭系统控制客户端可见性
在签名的嵌入配置中,Looker 用户通常会向自己的客户展示数据,而这些客户来自不同的公司或群组,彼此之间不应知晓对方的存在。在这种情况下,为了保护客户的私密信息,我们强烈建议您将 Looker 配置为封闭系统,也称为多租户安装。在封闭系统中,内容是孤立的,以防止不同群组的用户相互了解。因此,我们建议您先启用封闭系统选项,然后再向任何外部用户授予对实例的访问权限。
如需了解详情,请参阅设计和配置访问权限级别系统和嵌入式分析的安全最佳实践文档页面。
生成已签名的嵌入网址
您可以通过多种方式生成签名的嵌入网址。您可以使用以下任一方法:
您可以使用信息中心的三点状信息中心菜单或 Look 或探索的“探索操作”齿轮菜单中的获取嵌入网址选项,生成已签名的嵌入网址。
使用 Looker API 的“创建签名的嵌入网址”端点,如本文档后面部分所述。
使用 Looker Embed SDK。
对已签名的嵌入网址进行编码。要构建正确的网址,您需要编写代码,以便使用密钥对网址进行正确编码并生成其他与安全相关的项。您可以在 Looker 嵌入示例 GitHub 代码库中找到多个示例脚本。以下部分介绍了您需要向这些脚本提供的信息,以及如何在不使用脚本的情况下构建已签名的嵌入网址。
手动编写已签名的嵌入网址
如需对已签名的嵌入网址进行编码,请先收集必要的 Looker 信息,然后创建已签名的嵌入网址。
收集必要的 Looker 信息
在开始构建网址之前,您首先需要确定需要包含的所有信息。您需要有:
嵌入网址
检索要嵌入的 Look、探索、查询可视化图表或信息中心的网址。然后,移除域名并在路径前面加上 /embed,如下所示:
| 项 | 常规网址格式 | 嵌入网址 |
|---|---|---|
| Look | https://instance_name.looker.com/looks/4 |
/embed/looks/4 |
| 探索 | https://instance_name.looker.com/explore/my_model/my_explore |
/embed/explore/my_model/my_explore |
| 查询可视化 | https://instance_name.looker.com/explore/my_model/my_explore?qid=1234567890abcdefghij12探索网址中 qid= 参数后面的 22 个字母数字字符构成 Query.client_id。Query.client_id 值是一个唯一字符串,表示查询和可视化设置。如需嵌入查询可视化图表,请检索查询可视化图表 Query.client_id 值,然后将 Query.client_id 复制到嵌入网址中。您可以使用 Looker 探索界面构建包含受支持的可视化图表的查询,并从 qid= 参数中复制 Query.client_id 值;也可以使用 Looker API(例如,使用 Get Query 方法)检索 Query.client_id。 |
/embed/query-visualization/Query.client_id |
| 用户定义的信息中心 | https://instance_name.looker.com/dashboards/1包含任何信息中心过滤条件值隐藏过滤条件值,即信息中心网址中的 hide_filter 参数。 |
/embed/dashboards/1 |
| LookML 信息中心 | https://instance_name.looker.com/dashboards/my_model::my_dashboard |
/embed/dashboards/my_model::my_dashboard |
| 对话式分析 | 对于会话页面:https://instance_name.looker.com/conversations对于代理页面:https://instance_name.looker.com/agents对于特定对话:https://instance_name.looker.com/conversations/conversation_id如需了解详情,请参阅嵌入对话分析文档页面。 |
/embed/conversations/embed/agents/embed/conversations/c9f370ac830b4669aeb494396422004c |
权限
权限集定义了用户或群组可以执行的操作。权限可以通过以下两种方式之一应用:
- 特定于模型:此类权限仅应用于属于同一角色的模型集。
- 实例范围:此类权限适用于整个 Looker 实例。拥有实例级权限的嵌入用户可以在整个 Looker 实例中执行某些功能,但无法访问基于其角色模型集中未包含的模型的内容。
确定您希望用户拥有的权限。下表列出了已签名嵌入的所有可用权限。已签名嵌入不支持以下列表中未列出的权限:
| 权限 | 依赖于 | 类型 | 定义 |
|---|---|---|---|
access_data |
无 | 特定于模型 | 允许用户访问数据(查看 Look、信息中心或探索时需要) |
see_lookml_dashboards |
access_data |
特定于模型 | 允许用户查看 LookML 信息中心。即使用户对信息中心所在的文件夹拥有查看权限,也需要此权限。 |
see_looks |
access_data |
特定于模型 | 允许用户查看 Look |
see_user_dashboards |
see_looks |
特定于模型 | 允许用户查看用户定义的信息中心,以及通过嵌入内容浏览文件夹 |
explore |
see_looks |
特定于模型 | 允许用户查看“探索”页面 |
create_table_calculations |
explore |
实例级 | 在探索中创建表计算时需要 |
create_custom_fields |
explore |
实例级 | 在“探索”中创建自定义字段时需要 |
can_create_forecast |
explore |
实例级 | 允许用户创建或修改可视化图表中的预测。 |
save_content |
see_looks |
实例级 | 允许用户对 Look 和信息中心进行更改并保存 |
send_outgoing_webhook |
see_looks |
特定于模型 | 允许用户安排将 Looker 内容传送到任意网络钩子 |
send_to_s3 |
see_looks |
特定于模型 | 允许用户安排将 Looker 内容传送到 Amazon S3 存储桶 |
send_to_sftp |
see_looks |
特定于模型 | 允许用户安排将 Looker 内容传送至 SFTP 服务器 |
schedule_look_emails |
see_looks |
特定于模型 | 允许用户安排将 Looker 内容发送到自己的邮箱(如果设置了名为“email”的用户属性),或发送到电子邮件网域许可清单所设限制范围内的邮箱。允许拥有 create_alerts 权限的用户向符合电子邮件网域许可清单所设限制的电子邮件地址发送提醒通知。 |
schedule_external_look_emails |
schedule_look_emails |
特定于模型 | 允许用户安排向任何电子邮件网域传送 Looker 内容。允许拥有 create_alerts 权限的用户向任何电子邮件网域发送提醒通知。 |
send_to_integration |
see_looks |
特定于模型 | 允许用户通过 Looker Action Hub 将 Looker 内容传送到与 Looker 集成的第三方服务。此权限与数据操作无关。 |
schedule_without_limit |
see_looks |
特定于模型 | 添加了 26.4 如果与至少一项允许用户传送 Looker 内容的其他权限结合使用,此权限可让用户传送 Look 或探索,以发送所有数据行。此权限会使 Looker Scheduler 中针对 Look 和探索的所有结果选项可见。 |
create_alerts |
see_looks |
实例级 | 允许用户在信息中心图块上创建提醒,以便在达到或超过指定条件时收到通知。用户可以修改、复制和删除自己的提醒以及其他用户的公开提醒。如果用户的 Slack 工作区未连接到 Looker 实例,则用户将无法创建向 Slack 发送通知的提醒。 |
download_with_limit |
see_looks |
实例级 | 允许用户下载应用了限制的查询结果 |
download_without_limit |
see_looks |
实例级 | 允许用户下载查询结果,不受任何限制 |
see_sql |
see_looks |
特定于模型 | 允许用户查看查询的 SQL 以及运行查询时出现的任何 SQL 错误 |
clear_cache_refresh |
access_data |
特定于模型 | 用户可以清除缓存并刷新嵌入式信息中心、旧版信息中心、信息中心图块、Look 和探索。 |
see_drill_overlay |
access_data |
特定于模型 | 让用户无需前往完整的“探索”页面即可深入分析。 |
manage_spaces |
无 | 实例级 | 启用内容浏览器,以便用户可以创建、复制、移动和删除文件夹。用户还需要对文件夹(如果是创建新文件夹,则为父文件夹)拥有管理访问权限、修改内容访问权限。 |
embed_browse_spaces |
无 | 实例级 |
启用内容浏览器,以便用户可以从嵌入内容中浏览文件夹。任何获得 embed_browse_spaces 权限的嵌入用户都可以访问个人嵌入文件夹和贵组织的共享文件夹(如果有)。
建议为拥有 save_content 权限的用户授予 embed_browse_spaces 权限,以便用户在选择内容保存位置时可以浏览文件夹。
如需查看文件夹中的内容,用户还需要 see_looks、see_user_dashboards 和 see_lookml_dashboards 权限。
嵌入用户需要具有 embed_browse_spaces 权限才能将信息中心或 Look 标记为收藏,因为将内容标记为收藏需要访问收藏夹文件夹。
|
embed_save_shared_space |
无 | 实例级 |
允许同时拥有 save_content 权限的用户在保存对话框中导航到组织的共享文件夹(如果有)。拥有 save_content 权限但没有 embed_save_shared_space 权限的用户只能将内容保存到其个人嵌入文件夹。
embed_save_shared_space 权限不会覆盖内容访问权限。例如,如要让用户能够保存到共享文件夹,他们仍需要对共享文件夹拥有管理访问权限、修改权限。此外,如果用户具有 save_content 权限和对共享文件夹的管理访问权限、修改权限,即使没有 embed_save_shared_space 权限,只要有其他方式可以导航到共享文件夹(例如使用嵌入式信息中心内的从此处探索选项),他们仍然可以在该文件夹中保存内容。
|
gemini_in_looker |
无 | 特定于模型 | 此权限是 Gemini 默认角色中包含的唯一权限。 此权限可让用户执行与管理控制台面板中 Gemini in Looker 页面上启用的任何 Gemini in Looker 功能相关的任务。某些任务可能需要额外的权限。 |
chat_with_agent |
gemini_in_looker |
特定于模型 | 新增了 25.18 对话式分析用户可以与基于最多五个 Looker 探索中的数据的数据智能体或信息中心数据智能体聊天。需要额外权限才能与信息中心数据智能体对话。 |
chat_with_explore |
chat_with_agent |
特定于模型 | 25.18 版新增功能 如果对话式分析用户还拥有其他必需权限,则可以与 Looker 探索进行对话。 |
save_agents |
chat_with_explore |
特定于模型 | 25.18 版新增功能 Conversational Analytics 用户可以在信息中心或探索中创建、修改、删除和共享数据代理。如需修改、删除或共享由其他用户创建的数据智能体,用户必须在智能体使用的每个模型上获得包含此权限的角色,以及其他必需权限和对智能体的管理访问权限、编辑权限。 |
admin_agents |
gemini_in_looker |
特定于模型 | 25.18 版新增 用户可以创建、修改、共享和删除数据智能体,以便与 Conversational Analytics API 和嵌入式 Conversational Analytics 搭配使用。用户创建数据智能体后,系统会自动为其授予管理访问权限、修改数据智能体访问权限。拥有此权限的用户无需获得数据智能体的内容访问权限,即可修改、删除或分享其他用户创建的数据智能体。 |
模型访问权限
确定用户应有权访问哪些 LookML 模型。这将是一个模型名称列表。
用户属性
确定用户应具备哪些用户属性(如果有)。您需要知道 Looker 中的用户属性名称,以及用户应具有的该属性的值。
群组
确定用户应属于哪些群组(如果有)。您需要的是群组 ID,而不是群组名称。将已签名的嵌入用户添加到 Looker 群组后,您就可以管理该用户对 Looker 文件夹的访问权限。已签名的嵌入用户有权访问与其 Looker 群组成员共享的所有文件夹。
您还可以使用 external_group_id 参数创建常规 Looker 群组之外的群组。在这种情况下,具有相同 external_group_id 的已登录嵌入用户将有权访问名为“Group”的共享文件夹,该文件夹是外部群组独有的。
嵌入式角色
permissions 和 models 参数会为嵌入用户创建角色。此角色在 Looker 的管理部分中的用户页面上显示为“嵌入式角色”。如果在嵌入网址中同时指定了 permissions、models 和 group_ids 参数,则嵌入的角色会叠加到已分配给 group_ids 参数中列出的群组的任何角色。这与标准角色相同,因为 Looker 中的所有角色都是累加的。
例如,假设您在 Looker 中有一个现有群组,其群组 ID 为 1,并且该群组已拥有名为 model_one 的模型的 explore 权限,而您创建了一个包含以下参数的嵌入网址:
group_ids=["1"]permissions=["access_data","see_looks"]models=["model_two"]
在这种情况下,嵌入用户将继承查看和探索 model_one 上的数据的能力,并且使用上述参数创建的嵌入角色也将授予查看 model_two 上的数据的能力。
创建嵌入网址
签名嵌入网址采用以下格式:
https://HOST/login/embed/EMBED URL?PARAMETERS&signature=SIGNATURE
主机
主机是 Looker 实例的托管位置。例如 analytics.mycompany.com。如果您尚未启用端口转发,请务必添加端口号,例如 analytics.mycompany.com:9999。
嵌入网址
嵌入网址已在之前确定。其格式如下:
/embed/looks/4/embed/explore/my_model/my_explore/embed/query-visualization/Query.client_id/embed/dashboards/1或/embed/dashboards-legacy/1/embed/dashboards/my_model::my_dashboard或/embed/dashboards-legacy/my_model::my_dashboard
这意味着模式 /embed//embed/ 将显示在最终到达网址中;这是正确的。
如果您使用的是嵌入式 JavaScript 事件,请务必将 embed_domain 参数(使用 iframe 的网域)添加到嵌入网址的末尾,如下所示:
/embed/looks/4
/embed/looks/4?embed_domain=https://mywebsite.com
在进行网址编码之前,embed_domain 参数会添加到嵌入网址中。如果您的嵌入网址已包含内容查询参数(例如过滤条件值),请使用和号 (&) 附加 embed_domain 参数:
/embed/looks/4?filter_name=value
/embed/looks/4?filter_name=value&embed_domain=https://mywebsite.com
如果您使用的是嵌入 SDK,请务必添加 embed_domain 参数,并在嵌入网址末尾添加 sdk=2,如下所示:
/embed/looks/4
/embed/looks/4?embed_domain=https://mywebsite.com&sdk=2
sdk=2 参数可让 Looker 识别 SDK 是否存在,并利用 SDK 提供的其他功能。SDK 本身无法添加此参数,因为它是签名网址的一部分。
参数
以下网址参数用于为签名嵌入指定必要的信息:
| 参数 | 默认值 | 说明 | 数据类型 | 示例 |
|---|---|---|---|---|
nonce |
必须提供值 | 您喜欢的任何随机字符串,但不能在一小时内重复,且长度必须少于 255 个字符。这可以防止攻击者重新提交合法用户的网址,以收集他们不应拥有的信息。 | JSON 字符串 | "22b1ee700ef3dc2f500fb7" |
time |
必须提供值 | 当前时间(以 UNIX 时间戳表示)。 | 整数 | 1407876784 |
session_length |
必须提供值 | 用户应在 Looker 中保持登录状态的秒数,介于 0 到 2,592,000 秒(30 天)之间。 | 整数 | 86400 |
external_user_id |
必须提供值 | 嵌入 Looker 的应用中每个用户的标识符。Looker 使用 external_user_id 来区分已签名的嵌入用户,因此必须为每个用户分配一个唯一 ID。您可以使用任何喜欢的字符串为用户创建 external_user_id,只要该字符串对该用户而言是唯一的即可。每个 ID 都与一组权限、用户属性和模型相关联。一个浏览器一次只能支持一个 external_user_id(即用户会话)。在会话期间,无法更改用户的权限或用户属性。出于安全考虑,请确保您不会在不同互动用户的不同嵌入会话中使用相同的 external_user_id,并确保您不会为具有不同权限、用户属性值或模型访问权限的单个用户使用相同的 external_user_id。如果为多个用户或为具有多项权限、用户属性或模型集的同一用户使用相同的 external_user_id,可能会导致原本无权访问数据的用户看到这些数据。 |
JSON 字符串 | "user-4" |
permissions |
必须提供值 | 用户应拥有的权限列表。如需查看允许的权限列表,请参阅本页面上的权限部分。 | 字符串数组 | [ "access_data", "see_looks"] |
models |
必须提供值 | 用户应有权访问的模型名称列表。 | 字符串数组 | [ "model_one", "model_two"] |
group_ids |
[] | 用户应属于的 Looker 群组列表(如果有)。使用群组 ID,而不是群组名称。 | 字符串数组 | ["4", "3"] |
external_group_id |
"" | 用户在嵌入 Looker 的应用中所属群组的唯一标识符。有权保存内容且共享外部群组 ID 的用户可以在名为“群组”的共享 Looker 文件夹中保存和修改内容。external_group_id 参数是创建嵌入用户外部群组的唯一可用方法。无法在 Looker 界面中配置外部嵌入用户群组。external_group_id 的长度不应超过 81 个字符。系统会为该群组创建相应的文件夹,文件夹名称最多可包含 100 个字符。文件夹名称的前缀为“Embed Shared Group ”,因此 external_group_id 限制为 81 个字符,以使其保持在 100 个字符或更少的限制范围内。 |
JSON 字符串 | "Accounting" |
user_attributes |
{} | 用户应具备的用户属性列表(如果有)。包含用户属性名称列表,后跟用户属性值。如果您的 LookML 模型已本地化,您可以在嵌入网址中使用 locale 用户属性来指定嵌入内容的语言。例如,添加参数 user_attributes { "locale" : "fr_FR" } 会导致嵌入内容加载法语作为其语言。 |
字符串哈希 | { "vendor_id" : "17", "company" : "xactness"} |
access_filters |
必须提供值 | 在 Looker 3.10 中,此参数已被移除,但网址中仍需要此参数。将 access_filters 与空占位符搭配使用,例如 access_filters={}。 |
空占位符 | {} |
first_name |
"" | 用户的名字。如果留空,first_name 将保留上一个请求中的值;如果从未设置过名字,则为“Embed”。 |
JSON 字符串 | "Alice" |
last_name |
"" | 用户的姓氏。如果留空,last_name 将保留上一个请求中的值;如果从未设置过姓氏,则为“Embed”。 |
JSON 字符串 | "Jones" |
user_timezone |
"" | 如果您已启用用户自选时区,则此参数会设置嵌入式 Look 或信息中心内时区下拉菜单中查看者时区选项的值。此参数不会直接更改内容显示时区;用户需要从下拉菜单中选择时区。如需查看有效值,请参阅签名的嵌入时区参考文档页面。Chat 团队提示:如果您希望嵌入的内容默认采用查看者的时区,请使用以下方法之一:?query_timezone=user_timezone 添加到嵌入网址。例如:/embed/dashboards/1?query_timezone=user_timezone |
JSON 字符串或 null | "US/Pacific"- 或 -null |
force_logout_login |
必须提供值 | 如果普通 Looker 用户已登录 Looker,并且查看了已签名的嵌入式内容,您可以选择:1) 他们应使用当前凭证查看该内容或2) 他们应退出账号,然后使用已签名的嵌入凭证重新登录。 | 布尔值(true 或 false) | true |
ca_chat |
true |
如果您已启用对话式分析和信息中心代理设置,则此设置可用于控制是否向嵌入用户显示信息中心代理对话窗格。如果为 true,则拥有与信息中心智能体互动的适当权限的用户可以看到 |
布尔值(true 或 false) | true |
签名
Looker 会使用签名来验证是否使用了正确的嵌入密钥在嵌入网址中生成签名,以及嵌入网址中的参数是否未发生更改。如果嵌入密钥或网址参数不同或已更改,则签名不匹配,身份验证将被拒绝。
因此,嵌入网址中的签名提供了强有力的加密证明,表明嵌入网址在传输过程中未被修改,并且嵌入网址是由拥有嵌入密钥的可信方创建的。
如需生成签名,您需要按照以下步骤操作。
- 按以下顺序收集以下参数值:
- 主机,后跟
login/embed/(例如analytics.mycompany.com/login/embed/) - 嵌入网址
- Nonce
- 当前时间
- 会话时长
- 外部用户 ID
- 权限
- 模型
- 群组 ID
- 外部群组 ID
- 用户属性
- 访问权限过滤条件(需要空占位符)
- 对话式分析信息中心数据智能体公开范围
- 主机,后跟
- 将除“主机”和“嵌入网址”以外的所有值设置为 JSON 格式
- 使用换行符 (
\n) 串联值 - 使用 Looker 嵌入密钥对串联字符串进行 HMAC-SHA1 签名
编码
最后一步是对网址进行网址编码。
在您对网址进行编码之前,使用所有可能参数的格式正确的嵌入网址可能如下所示:
https://analytics.mycompany.com/login/embed//embed/dashboards/1?
nonce="22b1ee700ef3dc2f500fb7"&
time=1407876784&
session_length=86400&
external_user_id="user-4"&
permissions=["access_data","see_user_dashboards","see_looks"]&
models=["model_one","model_two"]&
group_ids=[4,3]&
external_group_id="Allegra K"&
user_attributes={"vendor_id":"17","company":"xactness"}&
access_filters={}&
ca_chat=false&
first_name="Alice"&
last_name="Jones"&
user_timezone="US/Pacific"&
force_logout_login=true&
signature=123456789ABCDEFGHIJKL
如前所述,/embed//embed/ 出现在您的网址中是正确的。
对网址进行编码后,网址应如下所示:
https://analytics.mycompany.com/login/embed/%2embed%2Fdashboards%2F1?
nonce=%2222b1ee700ef3dc2f500fb7&%22&
time=1407876784&
session_length=86400&
external_user_id=%22user-4%22&
permissions=%5B%22access_data%22%2C%22see_user_dashboards%22%2C%22see_looks%22%5D&
models=%5B%22model_one%22%2C%22model_two%22%5D&
group_ids=%5B4%2C3%5D&
external_group_id=%22Allegra%20K%22&
user_attributes=%7B%22vendor_id%22%3A%2217%22%2C%22company%22%3A%22xactness%22%7D&
access_filters%7B%7D%26%0A
ca_chat=false&
first_name=%22Alice%22&
last_name=%22Jones%22&
user_timezone=%22US%2FPacific%22&
force_logout_login=true&
signature=123456789ABCDEFGHIJKL
使用“创建已签名的嵌入网址”API 端点
Looker API 包含创建已签名的嵌入网址端点,该端点接受一组已签名的嵌入参数(包括要嵌入的内容的网址),并返回一个完整的、经过编码和加密签名的网址。
如需从 Web 服务器使用此 API 端点,Web 服务器必须能够使用管理员权限向 Looker API 进行身份验证。Web 服务器网域还必须列在嵌入网域许可清单中。
您还可以使用 API Explorer 生成使用此端点的签名网址。您可以从 Looker Marketplace 在 Looker 实例上安装 API Explorer。生成签名网址后,必须完整复制该网址,且只能使用一次,否则会失败。API Explorer 还可用于生成签名网址,并将其与手动创建的签名网址进行比较,以便进行问题排查。
如需详细了解 Looker API,请参阅 Looker API 使用入门文档页面。
测试嵌入网址
如需测试最终网址,请将其粘贴到 Looker 管理部分的嵌入页面上的嵌入 URI 验证工具中。虽然此选项无法告知您设想的数据和权限是否已正确设置,但可以验证您的身份验证是否正常运行。
使用签名嵌入功能嵌入多个 iframe 的最佳实践
如果您在单个页面上嵌入多个 Looker iframe,则针对同一 external_user_id 的同时身份验证请求可能会导致用户预配冲突、Looker 服务器上的锁争用或会话中断。当您的应用嵌入多个 iframe 时,请遵循以下最佳实践:
仅使用签名网址对第一个 iframe 进行身份验证:通过自定义网域使用启用 Cookie 的签名嵌入时,只有页面上的第一个 iframe 应加载签名
/login/embed/...网址。后续 iframe 必须等到第一个 iframe 完成身份验证,然后加载未签名的嵌入网址(例如/embed/dashboards/DASHBOARD_ID),以便从第一个 iframe 继承会话 Cookie,而无需重新运行用户预配。Looker Embed SDK (@looker/embed-sdk) 会在首次连接解析后自动处理此问题。预加载 iframe 以建立会话:如需在加载多个 iframe 之前实例化嵌入用户会话,请使用
/embed/preload(或嵌入 SDK v2 中的.preload()方法)预加载 iframe,以尽快建立会话。使用框架内导航,而不是重新创建 iframe:使用 Embed SDK v2 时,您可以通过调用
connection.loadDashboard(DASHBOARD_ID)或connection.loadUrl(EMBED_URL)等方法在已实例化的 iframe 中导航,而无需创建新的 iframe。如需了解详情,请参阅嵌入 SDK 简介。在不使用 Cookie 的嵌入中共享单个
session_reference_token:如果您在页面上使用不使用 Cookie 的嵌入功能嵌入多个 iframe,请参阅不使用 Cookie 的嵌入页面上的使用不使用 Cookie 的嵌入功能嵌入多个 iframe 的最佳实践。