Apache Superset Embedded SDK 实战:利用 Guest Token 将仪表盘安全嵌入自有应用

发布时间:2026/9/18 10:51:58

Apache Superset Embedded SDK 实战:利用 Guest Token 将仪表盘安全嵌入自有应用 Apache Superset Embedded SDK 实战利用 Guest Token 将仪表盘安全嵌入自有应用【免费下载链接】supersetApache Superset is a Data Visualization and Data Exploration Platform项目地址: https://gitcode.com/gh_mirrors/supers/superset本文围绕 Apache Superset 仓库中的 superset-embedded-sdk/README.md 展开讲解如何借助官方 Embedded SDK通过 iframe 将 Superset 仪表盘嵌入你自己的 Web 应用并使用 Guest Token 复用宿主应用自身的认证体系让用户无需登录 Superset 即可查看受控数据。读完本文你将掌握 SDK 的安装与调用、Guest Token 的签发原理、iframe 沙箱加固方式以及 SDK 底层的通信与令牌自动刷新机制。SDK 是什么一句话理解嵌入原理Embedded SDK 的核心思路非常简单在宿主页面中动态创建一个 iframe让 iframe 加载 Superset 内部的仪表盘页面从而把仪表盘“镶”进你自己的应用。SDK 负责三件关键事情根据传入的配置构造正确的嵌入式仪表盘 URL{supersetDomain}/embedded/{dashboardId}把宿主后端签发的 Guest Token 通过消息通道传递给 iframe 内的 Superset 页面完成免登录授权提供卸载、获取滚动尺寸、获取永久链接等控制能力方便宿主应用与嵌入式仪表盘交互。其核心实现位于 superset-embedded-sdk/src/index.ts 中的embedDashboard函数源码与本文后续内容一一对应。快速开始安装与最小调用通过 npm 安装SDK 以 npm 包形式发布包名为superset-ui/embedded-sdknpm install --save superset-ui/embedded-sdk安装后在代码中引入并调用import { embedDashboard } from superset-ui/embedded-sdk; embedDashboard({ id: abc123, // 由 Superset 的嵌入配置界面提供 supersetDomain: https://superset.example.com, mountPoint: document.getElementById(my-superset-container), // 任意可容纳 iframe 的 HTML 元素 fetchGuestToken: () fetchGuestTokenFromBackend(), dashboardUiConfig: { // 仪表盘 UI 配置hideTitle、hideTab、hideChartControls、filters.visible、filters.expanded可选、urlParams可选 hideTitle: true, filters: { expanded: true, }, urlParams: { foo: value1, bar: value2, // ... } }, // 可选额外的 iframe sandbox 属性 iframeSandboxExtras: [allow-top-navigation, allow-popups-to-escape-sandbox] });通过 CDN 加载也可以不经过构建工具直接从 CDN 加载。此时 SDK 会以全局变量supersetEmbeddedSdk暴露script srchttps://unpkg.com/superset-ui/embedded-sdk/script script supersetEmbeddedSdk.embedDashboard({ // ... 这里填入与上面示例完全相同的参数 }); /script说明SDK 当前仓库版本为0.1.0-alpha.12见 superset-embedded-sdk/package.json运行时依赖superset-ui/switchboardiframe 消息通信与jwt-decode解析 Guest Token 过期时间。embedDashboard 参数全解embedDashboard是 SDK 唯一的入口函数其类型定义EmbedDashboardParams位于 superset-embedded-sdk/src/index.ts各参数含义如下参数类型必填说明idstring是仪表盘的嵌入配置 ID由 Superset 的嵌入配置界面生成supersetDomainstring是Superset 实例域名需带协议如https://superset.example.commountPointHTMLElement是用于挂载 iframe 的宿主页面 HTML 元素fetchGuestToken() Promisestring是从宿主后端获取 Guest Token 的函数dashboardUiConfigUiConfigType否仪表盘 UI 与行为配置见下debugboolean否是否输出调试日志默认falseiframeTitlestring否iframe 的title属性默认Embedded DashboardiframeSandboxExtrasstring[]否额外的 iframe sandbox 属性默认[]dashboardUiConfig 详解dashboardUiConfig类型为UiConfigType见 src/index.ts控制嵌入后仪表盘的外观与交互字段类型说明hideTitleboolean隐藏仪表盘标题hideTabboolean隐藏 Tab 页签hideChartControlsboolean隐藏图表控制编辑类控件filters.visibleboolean是否显示筛选器面板filters.expandedboolean筛选器面板是否默认展开urlParamsRecordstring, any追加到嵌入式页面 URL 上的自定义查询参数从源码src/index.ts可以看到这些配置最终被序列化为 URL 查询参数传给 iframehideTitle、hideTab、hideChartControls通过位掩码合并为一个数字uiConfighideTitle记 1、hideTab记 2、hideChartControls记 8源码 src/index.tsfilters.visible与filters.expanded分别映射为 URL 参数show_filters与expand_filters映射表定义在 superset-embedded-sdk/src/const.ts若urlParams中的键与上述参数冲突urlParams优先生效见 src/index.ts 的合并顺序。认证与授权Guest Token 机制嵌入式资源使用一种特殊令牌 ——Guest Token访客令牌—— 来授予用户访问 Superset 的权限而无需你的用户直接登录 Superset。整体流程为宿主后端向 Superset 的POST /security/guest_token端点申请令牌再把令牌传给宿主前端前端 SDK 拿到令牌后用它完成仪表盘嵌入。在宿主后端创建 Guest Token宿主后端需要以 HTTPPOST方式请求/security/guest_token请求体描述该令牌将被授予哪些资源访问权限。Guest Token 还可以携带Row Level Security行级安全RLS规则按用户动态过滤数据。发起该请求的代理必须拥有can_grant_guest_token权限。服务端校验逻辑可在 superset/security/api.py 中查看请求体先经GuestTokenCreateSchema校验再校验资源存在性最后调用create_guest_access_token生成令牌。示例请求体{ user: { username: stan_lee, first_name: Stan, last_name: Lee }, resources: [{ type: dashboard, id: abc123 }], rls: [ { clause: publisher Nintendo } ] }字段说明与 superset/security/api.py 中的 schema 一一对应user可选用户属性可用于图表内的 Jinja 模板便于做个性化渲染对应UserSchema中的username、first_name、last_name字段resources必填令牌可访问的资源列表type目前支持dashboard枚举定义见 superset/security/guest_token.pyid为资源标识rls必填行级安全规则列表clause为过滤条件可选dataset指定数据集编号。令牌生效后的角色与默认配置在宿主应用内使用 Guest Token 时Superset 会创建一个匿名用户对象Anonymous user来完成认证。该访客匿名用户默认归属于公共角色对应配置项GUEST_ROLE_NAME Public该配置位于 superset/config.py。Guest Token 底层是 JWT相关的服务端配置也在 superset/config.py配置项默认值说明GUEST_TOKEN_JWT_SECRETtest-guest-secret-change-meJWT 签名密钥生产环境必须更换GUEST_TOKEN_JWT_ALGOHS256JWT 签名算法GUEST_TOKEN_JWT_EXP_SECONDS300令牌有效期默认 5 分钟GUEST_TOKEN_JWT_AUDIENCENoneJWT 受众声明可配置为固定字符串或回调函数启用嵌入式功能的特性开关嵌入功能默认并未开启。服务端需要打开特性开关EMBEDDED_SUPERSET默认False见 superset/config.py。嵌入式仪表盘的查询接口 superset/embedded/api.py 在before_request钩子中检查该开关未开启时直接返回 404。iframe 沙箱默认安全模型与扩展Embedded SDK 默认以sandbox沙箱模式创建 iframe对 iframe 内内容的执行施加限制。SDK 默认添加的 sandbox 属性见 src/index.ts包括allow-same-origin同源策略postMessage通信所必需allow-scripts允许执行脚本allow-presentation支持图表全屏展示allow-downloads支持将图表下载为图片allow-forms允许表单提交allow-popups支持将图表导出为 CSV 时打开弹窗。如需更多能力通过iframeSandboxExtras追加额外的 sandbox 属性例如放开顶层导航与弹窗逃逸iframeSandboxExtras: [allow-top-navigation, allow-popups-to-escape-sandbox]源码级剖析SDK 的底层工作机制1. 通信通道MessageChannel Switchboardiframe 加载完成后SDK 会创建一个MessageChannel把其中一个端口通过postMessage传给 iframe 内的 Superset 页面消息类型常量__embedded_comms__定义在 src/const.ts从而建立宿主窗口与 iframe 之间的双向通信参见 src/index.ts。Switchboard来自superset-ui/switchboard包在此基础上封装出类型安全的消息收发 APIGuest Token 正是通过这条通道发送给 iframe 内的仪表盘页面的。2. Guest Token 自动刷新Guest Token 默认有效期只有 5 分钟因此 SDK 会在令牌临近过期时自动重新调用fetchGuestToken并再次通过消息通道下发新令牌避免嵌入页面因令牌过期而请求失败。刷新时机的计算逻辑位于 superset-embedded-sdk/src/guestTokenRefresh.tsREFRESH_TIMING_BUFFER_MS 5000提前 5 秒刷新避免 Superset 请求恰好落在过期瞬间MIN_REFRESH_WAIT_MS 10000最小刷新间隔 10 秒防止异常场景下高频刷新请求DEFAULT_TOKEN_EXP_MS 300000当解析 JWT 的exp失败时按 5 分钟兜底计算。SDK 通过jwt-decode解析 JWT兼容整数秒与 ISO 字符串两种exp格式见 src/guestTokenRefresh.ts。对应的单元测试在 superset-embedded-sdk/src/guestTokenRefresh.test.ts覆盖了 epoch 秒、带小数的 epoch、ISO 日期、过期令牌与非法日期共五种场景。3. 返回的 EmbeddedDashboard 控制句柄embedDashboard返回一个 Promiseresolve 出的对象类型EmbeddedDashboard见 src/index.ts提供四个方法方法说明getScrollSize()获取 iframe 内容可滚动尺寸{ width, height }用于自适应宿主页面布局unmount()从mountPoint中移除 iframe卸载嵌入式仪表盘getDashboardPermalink(anchor)获取仪表盘指定位置的永久链接getActiveTabs()获取当前激活的 Tab 列表这四个方法都是通过 Switchboard 通道向 iframe 内的页面发起远程调用见 src/index.ts宿主应用可以据此实现“随仪表盘 Tab 切换而联动自身导航”“提供返回按钮时主动卸载”等产品化交互。端到端接入清单将以上内容串成一个完整的接入流程服务端打开特性开关EMBEDDED_SUPERSET True并设置生产环境的GUEST_TOKEN_JWT_SECRET权限为签发令牌的账号授予can_grant_guest_token权限并按需配置GUEST_ROLE_NAME对应的角色及其可访问资源宿主后端实现一个受你自身认证体系保护的接口内部调用POST /security/guest_token构造带user、resources、rls的请求体并返回令牌宿主前端安装superset-ui/embedded-sdk调用embedDashboard把fetchGuestToken指向第 3 步的接口并传入id、supersetDomain、mountPoint交互增强按需使用dashboardUiConfig定制 UI用iframeSandboxExtras调整沙箱策略用返回值中的四个方法实现卸载、滚动自适应、永久链接与 Tab 联动。总结Superset Embedded SDK 以“iframe 嵌入 Guest Token 授权 消息通道通信”三件套提供了一条将 Superset 仪表盘无缝接入自有产品体系的标准路径用户认证完全复用宿主应用数据访问通过resources与 RLS 规则精细收敛令牌自动刷新保证了长时间使用的稳定性沙箱默认策略则守住安全底线。若需更深入地调试或扩展建议直接阅读 superset-embedded-sdk/src/index.ts 与 superset/security/api.py 两份核心源码。【免费下载链接】supersetApache Superset is a Data Visualization and Data Exploration Platform项目地址: https://gitcode.com/gh_mirrors/supers/superset创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/18 10:51:58

TRC-20 FullNode全栈搭建:从协议原理到私有链实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/18 12:27:06

Matlab波束形成实现指南:从相移到MVDR与宽带处理

简介:面向无线通信、雷达及声纳阵列信号处理学习者的 MATLAB 波束赋形专题文档,系统讲解均匀线阵方向图绘制、波束宽度与波达方向及阵元数的关系、栅瓣产生与抑制、最优权傅里叶变换、最大信噪比准则方向图与功率谱、ASC旁瓣相消MSE准则等核心内容。资源…

2026/9/18 12:27:06

python-pptx+pandas+SQL拆解整合推广传播案

简介:这份由广州4A金燕达观于2019年6月25日制作的莆田保利林语墅整合推广传播案,面向房地产营销策划、品牌推广与广告文案从业者,尤其适合研究高端别墅项目如何突破销售困境、重构产品价值与客群沟通策略的读者。方案围绕项目先天条件不足、展…

2026/9/18 12:22:06

2026年10款精选降AIGC工具推荐:AIGC检测轻松拿捏

随着知网、维普、万方等主流学术平台对AIGC检测标准的持续收紧,论文通过率面临更大挑战。选择合适的降AI工具已成为学术写作中的关键环节。本文将实测对比10款主流工具,为读者提供精准的解决方案参考。为什么需要降 AI 率工具? 2026 年&#…

2026/9/16 12:52:37

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/18 0:01:09

Google Colab 实战:运行模型、数据加载与报错排查

1. 为什么我劝你先搞懂 Colab 的运行模型1.1 Colab 到底是什么,跟本地跑代码差在哪Google Colab 简单说就是一台跑在浏览器里的 Linux 虚拟机,你打开一个 Notebook,背后就连上了一台带 GPU 的远程机器。你在单元格里敲的每一行 Python&#x…

2026/9/18 0:01:09

C语言数据类型与表达式详解

1. C语言数据与数据类型概述在C语言编程中,数据是程序处理的核心对象。理解数据的分类和特性是掌握C语言的基础。C语言中的数据主要分为四大类:常量、变量、表达式和函数。这些数据类型构成了C语言程序的基本元素,每种类型都有其独特的特性和…

2026/9/18 0:01:09

SQL时间字段指定时间段查询:区间语义、索引与时区避坑

上周排查一个线上问题&#xff0c;用户反馈"昨天的订单一条都没查到"&#xff0c;但数据库里明明躺着两千多条。最后定位下来&#xff0c;不是数据丢了&#xff0c;也不是接口挂了&#xff0c;而是那个查询条件把时间段写成了> 2024-05-20 00:00:00 AND < 2024…

2026/9/16 22:55:57

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/16 22:56:09

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/16 22:56:16

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码