单点登录 (SSO) 嵌入是一种向用户呈现私密嵌入式 Look、可视化图表、探索、信息中心或 LookML 信息中心的方式,用户无需拥有单独的 Looker 登录功能。相反,用户需要通过您自己的应用进行身份验证。
SSO 嵌入的工作原理是创建一个特殊的 Looker 网址,您将在 iframe 中使用该网址。该网址包含您想分享的信息、您系统中用户的 ID 以及您希望该用户拥有的权限。然后,您将使用 Looker 提供的密钥为该网址签名。
如需公开嵌入,请参阅Looking 公开共享、导入和嵌入文档页面中的使用 iframe
标记公开嵌入部分。
Looker 管理员必须先在 Looker 管理控制台中启用 SSO 嵌入并创建嵌入密钥,然后才能在您的 Looker 实例上使用单点登录嵌入。有关说明,请参阅使用入门 - 启用单点登录嵌入文档页面。
针对 SSO 嵌入的正确托管
有些浏览器(例如 Safari 或装有会拦截广告或跟踪 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 实例,请确保将使用 SSO 嵌入的应用使用您的 Looker 实例所在的网域。
使用封闭式系统控制客户端可见性
在 Looker 嵌入配置中,Looker 用户经常会向其自己的客户显示数据,同时让来自不同公司或群组的客户彼此了解。在这种情况下,为保护客户的隐私信息,我们强烈建议您将 Looker 配置为封闭系统(也称为“多租户安装”)。在封闭系统中,内容是相互孤立的,以防止不同群组的用户彼此了解。因此,我们建议您先启用封闭式系统选项,然后再允许任何外部用户访问您的实例。
有关详情,请参阅设计和配置访问权限级别系统和嵌入式分析的安全性最佳实践文档页面。
构建嵌入网址
您可以通过多种方式创建单点登录嵌入网址。您可以使用以下方法之一:
使用 Looker Embed SDK。
对单点登录嵌入网址进行编码。构建正确的网址会要求您编写代码,以便使用密钥对网址进行正确编码,并生成其他安全相关项。您可以在 Looker SSO 示例 GitHub 代码库中找到多个示例脚本。以下各部分介绍了您需要提供给这些脚本的信息,以及如何在不使用脚本的情况下构建单点登录嵌入网址。
收集必要的 Looker 信息
在构建网址时,您首先需要确定需要添加的所有信息。您需要有:
嵌入网址
检索要嵌入的样式、探索、查询可视化图表或信息中心的网址。然后移除域名,并将 /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 值,例如,您也可以通过 Get Query 方法检索 Query.client_id 。 |
/embed/query-visualization/Query.client_id |
用户定义的信息中心 | https://instance_name.looker.com/ dashboards/1 在信息中心内添加所有信息中心过滤条件值,或者如果隐藏过滤条件值,则添加信息中心网址中的 hide_filter 参数。 |
|
用户定义的旧版 信息中心 |
https://instance_name.looker.com/ dashboards-legacy/1 |
/embed/dashboards-legacy/1 |
LookML 信息中心 | https://instance_name.looker.com/ dashboards/my_model::my_dashboard |
/embed/dashboards/my_model::my_dashboard |
旧版 LookML 信息中心 |
https://instance_name.looker.com/ dashboards-legacy/my_model::my_dashboard |
/embed/dashboards-legacy/my_model::my_dashboard |
嵌入的内容始终反映的是内容的正式版。在开发模式期间所做的任何更改如果不会影响内容并且尚未部署到生产环境中,则不会显示在嵌入内容中。
权限
权限集定义了用户或群组可以执行的操作。权限可以通过以下两种方式之一应用:
- 模型专用:此类权限仅适用于属于同一角色的模型集。
- 实例级:此类权限适用于整个 Looker 实例。具有实例级权限的嵌入用户可以在整个 Looker 实例中执行特定功能,但无法根据角色模型中未包含的模型访问内容。
确定您希望用户拥有的权限。以下列表显示了单点登录嵌入的所有可用权限。SSO 嵌入不支持以下列表中的权限:
权限 | 取决于 | 类型 | 定义 |
---|---|---|---|
access_data |
无 | 型号专属 | 允许用户访问数据(查看 Looks、信息中心或探索所需的权限) |
see_lookml_dashboards |
access_data |
型号专属 | 让用户查看 LookML 信息中心 |
see_looks |
access_data |
型号专属 | 允许用户查看 Looks |
see_user_dashboards |
see_looks |
型号专属 | 允许用户查看用户定义的信息中心,以及从嵌入内容中浏览文件夹 |
explore |
see_looks |
型号专属 | 允许用户查看探索页面 |
create_table_calculations |
explore |
实例级 | 需要在“探索”中创建表格计算 |
create_custom_fields |
explore |
实例级 | 添加的 22.4 需要在“探索”中创建自定义字段 |
can_create_forecast |
explore |
实例级 | 添加 22.12 允许用户在可视化图表中创建或修改预测。 |
save_content |
see_looks |
实例级 | 允许用户对样式和信息中心进行更改并保存 |
send_outgoing_webhook |
see_looks |
型号专属 | 允许用户将 Looker 内容传送到任意 webhook |
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 操作中心向与 Looker 集成的第三方服务提供 Looker 内容。此权限与数据操作无关。 |
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 |
型号专属 | ADDED 21.14 用户可以清除缓存和刷新嵌入式信息中心、旧版信息中心、信息中心图块、外观和探索。 |
see_drill_overlay |
access_data |
型号专属 | 让用户可以展开深入探索,而无需转到完整的“探索”页面。 |
embed_browse_spaces |
无 | 实例级 | 启用内容浏览器,以便用户从嵌入内容中浏览文件夹。任何获得 embed_browse_spaces 权限的嵌入用户都将有权访问个人嵌入文件夹以及贵组织的共享文件夹(如果有)。建议建议拥有 save_content 权限的用户使用 embed_browse_spaces 权限,以便用户在选择保存内容的位置时能够浏览文件夹。若要查看文件夹中的内容,用户还需要拥有 see_looks 、see_user_dashboards 和 see_lookml_dashboards 权限。 |
embed_save_shared_space |
无 | 实例级 |
ADDED 21.4
让拥有 save_content 权限的用户在保存对话框中导航到组织的共享文件夹(如果有)。拥有 save_content 权限但没有 embed_save_shared_space 权限的用户只能选择将内容保存到个人嵌入文件夹。embed_save_shared_space 权限不会覆盖内容访问权限。例如,要让用户能够将内容保存到共享文件夹,用户仍需拥有对共享文件夹的管理访问权限、修改权限。此外,缺少 embed_save_shared_space 权限并不会禁止拥有 save_content 权限的用户以及对共享文件夹拥有管理访问权限、修改权限的用户保存内容,即使他们有其他方法导航到共享文件夹(例如,使用嵌入式信息中心内的从此处探索选项)。 |
模型访问权限
确定用户有权访问哪些 LookML 模型。这只是模型名称列表。
用户属性
确定该用户应具有的用户属性(如果有)。您需要 Looker 中的用户属性的名称,以及用户应该具有的该属性的值。
群组
确定该用户应属于哪些群组(如果有)。您需要群组 ID 而不是群组名称。通过向 Looker 群组添加单点登录嵌入用户,您可以管理该用户对 Looker 文件夹的访问权限。SSO 嵌入用户将有权访问与其 Looker 群组成员共享的任何文件夹。
您还可以使用 external_group_id
参数创建位于常规 Looker 群组外部的群组。在这种情况下,拥有相同 external_group_id
的 SSO 嵌入用户将有权访问外部群组独有的名为“群组”的共享文件夹。
嵌入式角色
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/沉浸式网址?参数&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
。因此,如果您已有 nonce=626
等参数,添加 embed_domain
的方式将如下所示:
/embed/looks/4?nonce=626
/embed/looks/4?embed_domain=https://mywebsite.com?nonce=626
如果您使用的是 Embed SDK,请务必添加 embed_domain
,并将 sdk=2
添加到嵌入网址的末尾,如下所示:
/embed/looks/4
/embed/looks/4?embed_domain=https://mywebsite.com&sdk=2
通过 sdk=2
参数,Looker 可以确定 SDK 是否存在,并可以充分利用该 SDK 提供的其他功能。SDK 本身无法添加此参数,因为它是已签名的单点登录网址的一部分。
参数
以下网址参数用于指定 SSO 嵌入的必要信息:
参数 | 默认值 | 说明 | 数据类型 | 示例 |
---|---|---|---|---|
nonce |
必须提供值 | 您喜欢的任何随机字符串,但不能在一小时内重复,并且必须少于 255 个字符。 这可以防止攻击者重新提交合法用户的网址,以收集这些信息。 |
JSON 字符串 | "22b1ee700ef3dc2f500fb7" |
time |
必须提供值 | 当前时间(采用 UNIX 时间戳)。 | 整数 | 1407876784 |
session_length |
必须提供值 | 用户应保持登录 Looker 的秒数,介于 0 到 2592000 秒(30 天)之间。 | 整数 | 86400 |
external_user_id |
必须提供值 | 应用中嵌入了 Looker 的每个用户的标识符。Looker 使用 external_user_id 来区分 SSO 嵌入用户,因此必须为每位用户分配一个唯一 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 文件夹(名为“群组”)中保存和修改内容。 |
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 |
"" | 如果您已启用特定于用户的时区,请在嵌入式“样式”或信息中心的“时区”下拉菜单中设置观看者时区选项的值。此参数不会直接更改显示内容的时区,用户需要从下拉菜单中选择所需时区。 如需查看有效值,请参阅 SSO 嵌入时区参考文档页面。 聊天团队提示:如果您希望嵌入的内容默认采用观看者的时区,请使用下列方法之一: ?query_timezone=user_timezone 添加到嵌入网址。例如:/embed/dashboards/1?query_timezone=user_timezone |
JSON 字符串或 null | "US/Pacific" 或 - null |
force_logout_login |
必须提供值 | 如果正常的 Looker 用户已经登录 Looker,并且他们查看了单点登录 (SSO) 项目,那么您可以选择: 1) 他们应使用当前凭据查看该项目 或 2) 他们应该退出并重新登录单点登录凭据。 |
布尔值(true 或 false) | true |
签名
要生成签名,您需要按照以下步骤操作。
- 按以下顺序收集以下参数值:
- 主机,后跟
login/embed/
(例如analytics.mycompany.com/login/embed/
) - 嵌入网址
- Nonce
- 当前时间
- 会话时长
- 外部用户 ID
- 权限
- 模型
- 群组 ID
- 外部群组 ID
- 用户属性
- 访问过滤器(需要一个空的占位符)
- 主机,后跟
- 将主机和嵌入网址以外的所有值的格式设置为 JSON
- 用换行符 (
\n
) 串联这些值 - HMAC 会使用 Looker 嵌入密钥对串联的字符串进行签名
编码
最后一步是对您的网址进行网址编码。
在对网址进行编码之前,格式正确的嵌入网址使用所有可能的参数,如下所示:
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={}&
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
first_name=%22Alice%22&
last_name=%22Jones%22&
user_timezone=%22US%2FPacific%22&
force_logout_login=true&
signature=123456789ABCDEFGHIJKL
使用 create_sso_embed_url
API 端点
Looker API 包含 create_sso_embed_url
端点,该端点接受一组 SSO 嵌入参数,这些参数包括您要嵌入的内容的网址,并返回经过编码的完整签名单点登录网址。
若要从 Web 服务器使用此 API 端点,该 Web 服务器必须能够以管理员权限向 Looker API 进行身份验证。嵌入网域许可名单中还必须列出该 Web 服务器网域。
您还可以使用 API Explorer 生成使用此端点的 SSO 网址。您可以从 Looker Marketplace 在您的 Looker 实例上安装 API Explorer,也可以在 Looker 的开发者门户中查看公开版本。生成后,单点登录网址必须完全复制,且只能使用一次,否则会失败。API Explorer 也有助于生成 SSO 网址,并将其与手动创建的 SSO 网址进行比较,以用于问题排查。
如需详细了解 Looker API,请参阅 Looker API 使用入门文档页面。
测试嵌入网址
要测试您的最终到达网址,请将其粘贴到 Looker 的管理部分的嵌入页面上的嵌入 URI 验证工具中。虽然使用以下选项无法判断您预想的数据和权限是否设置正确,但它可以验证您的身份验证是否正常运行。