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 }); }; }