0

我有一个 ASP.NET 4.0 Web 应用程序,它使用针对 AD 的 Windows 身份验证和一个用于角色管理的 SQL Server。

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

我是否可以在 Global Application_Start 方法中检查身份验证,还是应该在其他地方执行此代码?

4

2 回答 2

1

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

而是使用Application_BeginRequest为每个传入请求引发的,但理想情况下,您应该在 Web 应用程序打算执行操作时检查授权(而不是身份验证),而不是在每个请求上抢先。

于 2015-06-18T21:39:03.413 回答
1

经过进一步研究,我发现了“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>());
        }
    }
于 2015-06-18T22:01:27.850 回答