C# Web窗体Windows身份验证与远程SQL数据库
我有一个ASP.NET 4.0 web应用程序,它使用Windows身份验证来对抗AD,并使用SQL Server进行角色管理 基本上,我希望所有拥有广告帐户的用户都能够访问该应用程序,但我希望使用Sql Server中的角色进一步保护该应用程序。我不希望用户必须输入密码进行身份验证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请求
我是否可以在全局应用程序启动方法中检查身份验证,还是应该在其他地方执行此代码?
应用程序启动
仅在应用程序本身初始化时触发一次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中保持角色。