如何拥有"请求"经过身份验证的用户ID的事件?

时间:2018-03-28 13:06:03

标签: asp.net azure-application-insights

我已经检测了我的网络应用程序,以便在可用时通过经过身份验证的用户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请求都是如此。 (一些转到应用程序定义的页面,其他部分是框架)

这次我不知道如何让它们包含经过身份验证的用户。任何帮助表示赞赏。

0 个答案:

没有答案
相关问题