C# Web窗体Windows身份验证与远程SQL数据库

C# Web窗体Windows身份验证与远程SQL数据库,c#,asp.net,webforms,windows-authentication,role-manager,C#,Asp.net,Webforms,Windows Authentication,Role Manager,我有一个ASP.NET 4.0 web应用程序,它使用Windows身份验证来对抗AD,并使用SQL Server进行角色管理 基本上,我希望所有拥有广告帐户的用户都能够访问该应用程序,但我希望使用Sql Server中的角色进一步保护该应用程序。我不希望用户必须输入密码进行身份验证 我是否可以在全局应用程序启动方法中检查身份验证,还是应该在其他地方执行此代码?应用程序启动仅在应用程序本身初始化时触发一次HttpContext.Current.User将包含导致IIS初始化应用程序的HTTP请求

我有一个ASP.NET 4.0 web应用程序,它使用Windows身份验证来对抗AD,并使用SQL Server进行角色管理

基本上,我希望所有拥有广告帐户的用户都能够访问该应用程序,但我希望使用Sql Server中的角色进一步保护该应用程序。我不希望用户必须输入密码进行身份验证


我是否可以在全局应用程序启动方法中检查身份验证,还是应该在其他地方执行此代码?

应用程序启动
仅在应用程序本身初始化时触发一次
HttpContext.Current.User
将包含导致IIS初始化应用程序的HTTP请求用户的详细信息


相反,请使用针对每个传入请求提出的
Application\u BeginRequest
,但理想情况下,当web应用程序打算执行操作时,您应该检查授权(而不是身份验证),而不是在每个请求上先发制人。

进一步研究后,我发现“Application\u AuthenticateRequest”我认为这将满足我使用Windows身份验证和Sql Server角色配置的目的

    protected void Application_AuthenticateRequest(Object sender, EventArgs e)
    {
        if (Request.IsAuthenticated)
        {
            // just grab the username without domain info
            string[] arrTmp = HttpContext.Current.User.Identity.Name.Split('\\');
            string username = arrTmp[arrTmp.Length - 1];

            // Create an array of role names
            List<String> arrlstRoles = new List<String>();

            // work-around
            if (username == "fakename")
                arrlstRoles.Add("Admin");

            // Add the roles to the User Principal
            HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(User.Identity, arrlstRoles.ToArray<String>());
        }
    }
受保护的无效应用程序\u AuthenticateRequest(对象发送方,事件参数e)
{
如果(请求已验证)
{
//只需抓取没有域信息的用户名
字符串[]arrTmp=HttpContext.Current.User.Identity.Name.Split(“\\”);
字符串username=arrTmp[arrTmp.Length-1];
//创建角色名称数组
List arrlstRoles=新列表();
//变通
如果(用户名==“fakename”)
arrlstRoles.Add(“Admin”);
//将角色添加到用户主体
HttpContext.Current.User=new System.Security.Principal.GenericPrincipal(User.Identity,arrlstRoles.ToArray());
}
}

这太宽了。根据您尚未提供的信息,可能的答案太多。请不要使用
ArrayList
。使用
列表
<代码> AlayList是过时的。谢谢约翰,我把它删掉了。你也可以考虑在AD中保持角色。