You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure中App Service的Application Insights仅显示一个用户,如何获取真实AD用户洞察?

问题原因

你看到的单一用户是Static Web App(SWA)调用App Service时使用的系统代理身份,而非终端用户的AD身份。这是因为SWA作为前端和后端之间的网关,默认会以自身的托管身份发起对App Service的请求,后端无法直接获取终端用户的身份信息,导致Application Insights(AI)只能追踪到这个代理身份,而非真实用户。

解决方法

1. 在SWA中配置传递终端用户身份到后端

SWA支持将前端已认证用户的AD身份信息通过请求头传递给后端API,操作步骤如下:

  • 打开SWA的Azure门户页面,进入配置 > API
  • 在身份验证设置中,勾选将用户身份传递到API选项
  • 保存配置后,SWA会在转发到App Service的请求中添加X-MS-CLIENT-PRINCIPAL-ID、X-MS-CLIENT-PRINCIPAL-NAME等请求头,携带终端用户的AD身份标识

2. 在App Service中捕获用户身份并关联到Application Insights

需要修改后端API代码,从请求头中提取用户身份信息,并将其注入到Application Insights的追踪上下文:

.NET示例

在API的中间件或过滤器中添加以下逻辑:

using Microsoft.ApplicationInsights.Extensibility;

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.Use(async (context, next) =>
    {
        if (context.Request.Headers.TryGetValue("X-MS-CLIENT-PRINCIPAL-ID", out var userId))
        {
            var telemetry = context.Features.Get<RequestTelemetry>();
            if (telemetry != null)
            {
                telemetry.Context.User.Id = userId;
                telemetry.Context.User.AuthenticatedUserId = userId;
            }
        }
        await next();
    });
    // 其他中间件配置...
}

Python/Flask示例

from flask import request
from applicationinsights.requests import WSGIApplication

def inject_user_telemetry(environ, start_response):
    user_id = request.headers.get('X-MS-CLIENT-PRINCIPAL-ID')
    if user_id:
        from applicationinsights import TelemetryClient
        tc = TelemetryClient()
        tc.context.user.id = user_id
        tc.context.user.authenticated_user_id = user_id
    return WSGIApplication(environ, start_response)

app.wsgi_app = inject_user_telemetry(app.wsgi_app)

3. 验证Application Insights的用户追踪配置

确保App Service的Application Insights扩展已正确配置:

  • 确认App Service已启用Application Insights,且连接字符串配置正确
  • 在AI的配置 > 数据收集中,确保用户和会话选项处于开启状态
  • 等待10-15分钟让AI完成数据收集和处理,之后即可在用户、会话视图中看到真实的终端用户数据,以及每个用户访问的端点、时间和来源信息

4. 排查SWA与App Service的关联问题

如果之前尝试关联SWA和App Service失败,可按以下步骤检查:

  • 确保SWA和App Service位于同一Azure区域,跨区域场景需配置VNet对等
  • 检查staticwebapp.config.json中的API路由配置,确保指向App Service的正确端点,示例如下:
{
  "routes": [
    {
      "route": "/api/*",
      "backend": {
        "url": "https://your-app-service.azurewebsites.net/api/"
      }
    }
  ]
}
  • 验证App Service的访问控制:将SWA的出站IP地址添加到App Service的访问限制允许列表,或暂时关闭严格的IP限制测试

内容的提问来源于stack exchange,提问作者Ritvik Biswas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 17:52:29