我有一个 ASP.NET 4.0 Web 应用程序,它使用针对 AD 的 Windows 身份验证和一个用于角色管理的 SQL Server。
基本上,我希望所有拥有 AD 帐户的用户都能够访问该应用程序,但我想使用 Sql Server 中的角色进一步保护该应用程序。我不希望用户必须输入密码进行身份验证。
我是否可以在 Global Application_Start 方法中检查身份验证,还是应该在其他地方执行此代码?
我有一个 ASP.NET 4.0 Web 应用程序,它使用针对 AD 的 Windows 身份验证和一个用于角色管理的 SQL Server。
基本上,我希望所有拥有 AD 帐户的用户都能够访问该应用程序,但我想使用 Sql Server 中的角色进一步保护该应用程序。我不希望用户必须输入密码进行身份验证。
我是否可以在 Global Application_Start 方法中检查身份验证,还是应该在其他地方执行此代码?
Application_Start
仅在应用程序本身初始化时触发一次。HttpContext.Current.User
将包含用户发出导致 IIS 初始化应用程序的 HTTP 请求的详细信息。
而是使用Application_BeginRequest
为每个传入请求引发的,但理想情况下,您应该在 Web 应用程序打算执行操作时检查授权(而不是身份验证),而不是在每个请求上抢先。
经过进一步研究,我发现了“Application_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>());
}
}