使用 “版本 ”下拉列表切换服务。 了解有关导航的详细信息。
适用于:✅ Azure 数据资源管理器
重要
破坏性变更:请于 2026 年 11 月 1 日前采取措施。 若要在嵌入式 Web UI 中保留Azure Maps视觉对象呈现,请更新托管应用程序以提供Azure Maps SAS 令牌,如嵌入Azure Maps呈现中所述。 从此日期开始,托管应用程序且不提供 Azure Maps SAS 令牌的服务将无法再呈现地图视觉对象。
可以在 iframe 中嵌入 Azure 数据资源管理器 Web UI,并将其托管在第三方网站上。 本文介绍如何在 iframe 中嵌入Azure 数据资源管理器 Web UI。
所有功能都经过可访问性测试,并且支持深色和浅色屏幕主题。
如何在 iframe 中嵌入 Web UI
将以下代码添加到网站:
<iframe
src="https://dataexplorer.azure.cn/?f-IFrameAuth=true&f-UseMeControl=false&workspace=<guid>"
></iframe>
查询 f-IFrameAuth 参数告知 Web UI 不 重定向以获取身份验证令牌,参数 f-UseMeControl=false 告知 Web UI 不 显示用户帐户信息弹出窗口。 这些操作是必需的,因为托管网站负责身份验证。
workspace=<guid> 查询参数为嵌入的 iframe 创建单独的工作区。 工作区是包含选项卡、查询、设置和连接的逻辑单元。 通过将它设置为唯一值,它可防止嵌入版本和无变量版本 https://dataexplorer.azure.cn之间的数据共享。
处理身份验证
嵌入 Web UI 时,托管页将处理身份验证。 下图描述了身份验证流。
使用以下步骤处理身份验证:
在应用程序中,侦听 getToken 消息。
window.addEventListener('message', (event) => { if (event.origin === "https://dataexplorer.azure.cn" && event.data.type === "getToken") { // CODE-1: Replace this placeholder with code to get the access token from Microsoft Entra ID and // then post a "postToken" message with an access token and an event.data.scope } })定义一个函数以将
event.data.scope映射到 Microsoft Entra 范围。 使用下表确定如何将event.data.scope映射到 Microsoft Entra 范围:资源 event.data.scope Microsoft Entra 范围 集群 queryhttps://{your_cluster}.{your_region}.kusto.chinacloudapi.cn/.defaultGraph People.ReadPeople.Read、User.ReadBasic.All、Group.Read.All仪表板 https://rtd-metadata.chinacloudsites.cn/user_impersonationhttps://rtd-metadata.chinacloudsites.cn/user_impersonation例如,以下函数根据表中的信息映射范围。
function mapScope(scope) { switch(scope) { case "query": return ["https://your_cluster.your_region.kusto.chinacloudapi.cn/.default"]; case "People.Read": return ["People.Read", "User.ReadBasic.All", "Group.Read.All"]; default: return [scope] } }从 Perform Single Page Application (SPA) 身份验证 为该范围获取 JWT 访问令牌。 此代码替换占位符 CODE-1。
例如,可以使用
@azure/MSAL-react获取访问令牌。 该示例使用之前定义的 mapScope 函数。import { useMsal } from "@azure/msal-react"; const { instance, accounts } = useMsal(); instance.acquireTokenSilent({ scopes: mapScope(event.data.scope), account: accounts[0], }) .then((response) => var accessToken = response.accessToken // - CODE-2: Replace this placeholder with code to post a "postToken" message with an access token and an event.data.scope )重要
只能使用用户主体名称(UPN)进行身份验证;不支持服务主体。
使用访问令牌发布 postToken 消息。 此代码替换占位符 CODE-2:
iframeWindow.postMessage({ "type": "postToken", "message": // the access token your obtained earlier "scope": // event.data.scope as passed to the "getToken" message }, 'https://dataexplorer.azure.cn'); }重要
托管窗口必须在过期之前通过发送包含更新令牌的新 postToken 消息来刷新令牌。 否则,令牌过期后,服务调用将失败。
提示
在示例项目中,可以查看使用身份验证 的应用程序 。
嵌入仪表板
若要嵌入仪表板,必须在主机的Microsoft Entra 应用与 Azure 数据资源管理器仪表板服务(RTD 元数据服务)之间建立信任关系。
执行执行单页应用程序 (SPA) 身份验证中的步骤。
打开 Azure 门户 ,确保登录到正确的租户。 在右上角,验证用于登录的身份。
在资源窗格中,选择Microsoft Entra ID>应用注册。
找到使用On-Behalf-Of流的应用并将其打开。
选择“清单”。
选择requiredResourceAccess。
在清单中添加以下条目:
重要
将
<RTD Metadata Service - Application ID>替换为 RTD 元数据服务 的应用程序 ID。 若要获取此服务的应用程序 ID,请执行以下步骤:- 登录到 Azure 门户。
- 在搜索栏中,输入 RTD 元数据服务,然后选择 服务主体: RTD 元数据服务。
- 在 RTD 元数据服务的“企业应用程序”页上,记下应用程序 ID 的值。
{ "resourceAppId": "<RTD Metadata Service - Application ID>", "resourceAccess": [ { "id": "388e2b3a-fdb8-4f0b-ae3e-0692ca9efc1c", "type": "Scope" } ] }在上述代码中,
388e2b3a-fdb8-4f0b-ae3e-0692ca9efc1c是 user_impersonation 权限。在 清单中保存更改。
选择API 权限,并确认已经添加一个新条目:RTD 元数据服务。
在Microsoft Graph下,为
People.Read、User.ReadBasic.All和Group.Read.All添加权限。在Azure PowerShell中,为应用添加以下新服务主体:
重要
替换为
<RTD Metadata Service - Application ID>之前获取的 RTD 元数据服务 的应用程序 ID。New-MgServicePrincipal -AppId <RTD Metadata Service - Application ID>如果您遇到
Request_MultipleObjectsWithSameKeyValue错误,则说明该应用已在租户中。在“API 权限”页中,选择“授予管理员同意”以同意所有用户。
注意事项
若要在没有查询区域的情况下嵌入仪表板,请使用以下设置:
<iframe src="https://dataexplorer.azure.cn/dashboards?[feature-flags]" />
[feature-flags] 的值是:
"f-IFrameAuth": true,
"f-PersistAfterEachRun": true,
"f-Homepage": false,
"f-ShowPageHeader": false,
"f-ShowNavigation": false,
"f-DisableExploreQuery": false,
嵌入 Azure Maps 渲染
为了呈现 Azure Maps 视觉对象,宿主应用程序通过 postMessage 提供 Azure Maps 共享访问签名(SAS)令牌。 这与Microsoft Entra身份验证分开;保留现有getToken处理程序。
创建Azure Maps帐户和生成短生存期 SAS 令牌的后端终结点。
扩展消息处理程序以接受带有
signature: "queryExplorer"和字符串requestId的getMapsToken消息。 在获取令牌之前,请验证event.origin是否为event.source,并且https://dataexplorer.azure.cn是你的 iframe 的contentWindow。在带有相同请求 ID 的
postMapsToken消息中返回 SAS 令牌。 在此示例中,iframeWindow是 iframe 的contentWindow,mapsSasToken是从您的后端获取的令牌:iframeWindow.postMessage({ signature: "queryExplorer", type: "postMapsToken", requestId: event.data.requestId, token: mapsSasToken }, "https://dataexplorer.azure.cn");
在 10 秒内响应。 失败时,发送 error: "mapsTokenUnavailable" 而不是 token。 Web UI 在需要时请求新令牌,因此请保持该处理程序处于注册状态,并通过后端续订令牌。
若要在截止时间之前测试新行为,请将f-IFrameAuth=true与f-enableAzureMapsSecureToken=true一起添加到 iframe URL 中。 2026 年 11 月 1 日, f-enableAzureMapsSecureToken 默认启用。
重要
使用主机应用程序的身份验证保护令牌终结点。 在服务器上保留帐户密钥,永不记录令牌。 如果限制 Azure Maps 允许的源,请包括 https://dataexplorer.azure.cn,即地图请求发起的来源。
使用这些资源设置和测试 SAS 身份验证:
- 将数据引入视图控件 - Azure Maps Web SDK 示例 - 使用 SAS 令牌身份验证的示例。
-
Azure函数代码 - 仅包含令牌生成逻辑;在将其用于嵌入式 Web UI 之前,请将其匿名触发器和示例站点
Referer检查替换为主机应用程序的身份验证和来源检查。
功能标志
重要
必须指定 f-IFrameAuth=true 标志才能使 iframe 正常工作。 其他标志是可选项。
托管应用可能想要控制用户体验的某些方面。 例如,隐藏连接窗格或禁止连接到其他群集。 针对这种情况,Web 浏览器支持功能标志。
功能标志可在 URL 中用作查询参数。 若要禁用添加其他群集,请在托管应用中使用 https://dataexplorer.azure.cn/?f-ShowConnectionButtons=false。
| 设置 | 说明 | 默认值 |
|---|---|---|
| f-显示共享菜单 | 显示“共享”菜单项 | 是 |
| f-显示连接按钮 | 显示用于添加新群集的“添加连接”按钮 | 是 |
| f-显示打开新窗口按钮 | 在 Web 中显示 open in web UI 按钮,该按钮会打开一个新的浏览器窗口,并将 https://dataexplorer.azure.cn 设置为具有正确群集和数据库作用域的指向目标。 | 假 |
| f-ShowFileMenu | 显示文件菜单(“下载”、“选项卡”、“内容”等) | 是 |
| f-ShowToS | 从“设置”对话框中显示Azure 数据资源管理器 服务条款的链接 | 是 |
| f-ShowPersona | 在右上角的设置菜单中显示用户名。 | 是 |
| f-UseMeControl | 显示用户的帐户信息 | 是 |
| f-IFrameAuth | 如果为 true,则 Web 浏览器将需要 iframe 来处理身份验证并通过消息来提供令牌。 此参数对于 iframe 方案是必需的。 | 假 |
| f-PersistAfterEachRun | 通常,浏览器会在事件中持续 unload 。 但是,unload 在 iframe 中托管时,不一定会触发该事件。 此标志会在每次查询运行之后触发持久化本地状态事件。 这限制了可能发生的任何数据丢失,以便仅影响从未运行的新查询文本。 |
假 |
| f-ShowSmoothIngestion | 如果为 true,则会在右键单击数据库时显示引入向导体验 | 是 |
| f-RefreshConnection | 如果为 true,则始终在加载页面时刷新模式,不依赖于本地存储。 | 假 |
| f-显示页面页眉 | 如果条件为 true,则显示包含 Azure 数据资源管理器 标题和设置的页面页眉。 | 是 |
| f-隐藏连接窗口 | 如果为 true,则左侧的连接窗格不会显示 | 假 |
| f-SkipMonacoFocusOnInit | 修复了承载在 iframe 上时的焦点问题 | 假 |
| f-主页 | 启用主页并将新用户重定向到该页面 | 是 |
| f-显示导航 | 如果为 true,则显示左侧的导航窗格 | 是 |
| f-DisableDashboardTopBar | 如果为 true,则在仪表板中隐藏顶部栏 | 假 |
| f-禁用新仪表板 | 如果为 true,则隐藏用于添加新仪表板的选项 | 假 |
| f-DisableDashboardEditMenu | 如果为 true,则隐藏用于编辑仪表板的选项 | 假 |
| 禁用仪表板文件菜单 | 如果为 true,则在仪表板中隐藏文件菜单按钮 | 假 |
| f-禁用仪表板共享菜单 | 如果为 true,则在仪表板中隐藏共享菜单按钮 | 假 |
| f-禁用控制面板删除 | 如果为 true,则隐藏仪表板删除按钮 | 假 |
| f-禁用磁贴刷新 | 如果为 true,则在仪表板中禁用磁贴刷新按钮 | 假 |
| f-禁用仪表板自动刷新 | 当值为 true 时,将在仪表板中禁用磁贴的自动刷新。 | 假 |
| f-DisableExploreQuery | 如果为 true,则禁用磁贴的 “浏览查询 ”按钮 | 假 |
| f-禁用交叉筛选 | 如果为 true,则在仪表板中禁用交叉筛选功能 | 假 |
| 隐藏仪表板参数栏 | 如果为 true,则在仪表板中隐藏参数栏 | 假 |