我已经检测了我的网络应用程序,以便在可用时通过经过身份验证的用户ID将遥测事件发送到azure portails。
适用于来自后端的TrackEvent:对于我的用户进行身份验证后,我在TelemetryInitialiser中使用的HttpContext.Current.Session中添加了一些信息。
public class MyTelemetryInitializer : ITelemetryInitializer
{
public void Initialize(ITelemetry telemetry)
{
if (HttpContext.Current?.Session?["user"] != null)
{
// Set the user id on the Application Insights telemetry item.
telemetry.Context.User.AuthenticatedUserId = user;
telemetry.Context.User.UserAgent = HttpContext.Current.Request.UserAgent;
// Set the session id on the Application Insights telemetry item.
telemetry.Context.Session.Id = HttpContext.Current.Session.SessionID;
}
}
}
和Global.asax.cs
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
BundleTable.EnableOptimizations = false;
AutoMapperConfig.RegisterMappings();
Bootstrapper.Initialise();
TelemetryConfiguration.Active.TelemetryInitializers.Add(new Common.MyTelemetryInitializer());
}
}
这使得已经来自后端的所有事件都具有经过身份验证的ID 字段集(即:跟踪,自定义事件,异常,依赖关系(调用DB)。
之后我还在前端自定义了自动创建的Javascript代码,以便" Page View"还有经过身份验证的身份证明:
<script type='text/javascript'>
var appInsights=window.appInsights||function(config)
{
function r(config){ t[config] = function(){ var i = arguments; t.queue.push(function(){ t[config].apply(t, i)})} }
var t = { config:config},u=document,e=window,o='script',s=u.createElement(o),i,f;for(s.src=config.url||'//az416426.vo.msecnd.net/scripts/a/ai.0.js',u.getElementsByTagName(o)[0].parentNode.appendChild(s),t.cookie=u.cookie,t.queue=[],i=['Event','Exception','Metric','PageView','Trace','Ajax'];i.length;)r('track'+i.pop());return r('setAuthenticatedUserContext'),r('clearAuthenticatedUserContext'),config.disableExceptionTracking||(i='onerror',r('_'+i),f=e[i],e[i]=function(config, r, u, e, o) { var s = f && f(config, r, u, e, o); return s !== !0 && t['_' + i](config, r, u, e, o),s}),t
}({
instrumentationKey:'XXXXXXXXXXXXXXXXXX'
});
window.appInsights=appInsights;
</script>
@if (Request.IsAuthenticated)
{
<script>
var user = "@User.Identity.Name.Replace("\\", "\\\\")";
appInsights.setAuthenticatedUserContext(user.replace(/[,;=| ]+/g, "_"));
</script>
}
<script>
appInsights.trackPageView();
</script>
为了实现这一点,它假设我在后端验证之前设置了一个响应Cookie。
这也有效,我的网页浏览事件包含经过身份验证的用户ID。
尽管如此,我仍然有一个差距:请求事件没有设置经过身份验证的用户ID字段。
如果我在没有字段的情况下检查请求,则直接请求和浏览页面时可以触发的所有AJAX请求都是如此。 (一些转到应用程序定义的页面,其他部分是框架)
这次我不知道如何让它们包含经过身份验证的用户。任何帮助表示赞赏。