Ejemplo n.º 1
0
        public void Init(HttpApplication app)
        {
            originalFormsAuthenticationModule = new System.Web.Security.FormsAuthenticationModule();
            var t = originalFormsAuthenticationModule.GetType();

            originalFormsAuthenticationModuleOnEnter = t.GetMethod("OnEnter", BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { typeof(Object), typeof(EventArgs) }, null);
            originalFormsAuthenticationModuleOnLeave = t.GetMethod("OnLeave", BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { typeof(Object), typeof(EventArgs) }, null);
            if (originalFormsAuthenticationModuleOnEnter == null || originalFormsAuthenticationModuleOnLeave == null)
            {
                throw new Exception("Unable to get all required FormsAuthenticationModule entrypoints using reflection.");
            }
            app.AuthenticateRequest += (source, e) =>
            {
                formsAuthenticationEnabled = false;
                var context = ((HttpApplication)source).Context;
                config = WebConfigurationManager.GetSection(FormsAuthConfigurationSection.ConfigurationSectionName, context.Request.Path) as FormsAuthConfigurationSection;
                if (config == null || !config.FormsAuthenticationEnabled)
                {
                    return;
                }
                if (!IsFormsAuthEnabled(context))
                {
                    return;
                }
                formsAuthenticationEnabled = true;
                originalFormsAuthenticationModuleOnEnter.Invoke(originalFormsAuthenticationModule, new [] { source, e });
            };
            app.PostAuthenticateRequest += (source, e) =>
            {
                var context = ((HttpApplication)source).Context;
                if (!formsAuthenticationEnabled && context.User == null && config != null && config.WindowsAuthenticationEnabled)
                {
                    var iisIdentity = context.Request.LogonUserIdentity;
                    if (iisIdentity != null)
                    {
                        context.User = iisIdentity.IsAnonymous ? new WindowsPrincipal(WindowsIdentity.GetAnonymous()) : new WindowsPrincipal(iisIdentity);
                    }
                }
            };
            app.EndRequest += (source, e) =>
            {
                if (!formsAuthenticationEnabled)
                {
                    return;
                }
                originalFormsAuthenticationModuleOnLeave.Invoke(originalFormsAuthenticationModule, new [] { source, e });
            };
        }
 public void Init(HttpApplication app)
 {
     originalFormsAuthenticationModule = new System.Web.Security.FormsAuthenticationModule();
     var t = originalFormsAuthenticationModule.GetType();
     originalFormsAuthenticationModuleOnEnter = t.GetMethod("OnEnter", BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { typeof(Object), typeof(EventArgs) }, null);
     originalFormsAuthenticationModuleOnLeave = t.GetMethod("OnLeave", BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { typeof(Object), typeof(EventArgs) }, null);
     if (originalFormsAuthenticationModuleOnEnter == null || originalFormsAuthenticationModuleOnLeave == null)
         throw new Exception("Unable to get all required FormsAuthenticationModule entrypoints using reflection.");
     app.AuthenticateRequest += (source, e) =>
     {
         formsAuthenticationEnabled = false;
         var context = ((HttpApplication)source).Context;
         config = WebConfigurationManager.GetSection(FormsAuthConfigurationSection.ConfigurationSectionName, context.Request.Path) as FormsAuthConfigurationSection;
         if (config == null || !config.FormsAuthenticationEnabled)
             return;
         if (!IsFormsAuthEnabled(context))
             return;
         formsAuthenticationEnabled = true;
         originalFormsAuthenticationModuleOnEnter.Invoke(originalFormsAuthenticationModule, new [] { source, e });
     };
     app.PostAuthenticateRequest += (source, e) =>
     {
         var context = ((HttpApplication)source).Context;
         if (!formsAuthenticationEnabled && context.User == null && config != null && config.WindowsAuthenticationEnabled)
         {
             var iisIdentity = context.Request.LogonUserIdentity;
             if (iisIdentity != null)
                 context.User = iisIdentity.IsAnonymous ? new WindowsPrincipal(WindowsIdentity.GetAnonymous()) : new WindowsPrincipal(iisIdentity);
         }
     };
     app.EndRequest += (source, e) =>
     {
         if (!formsAuthenticationEnabled)
             return;
         originalFormsAuthenticationModuleOnLeave.Invoke(originalFormsAuthenticationModule, new [] { source, e });
     };
 }