Web 窗体窗口身份验证与远程 SQL 数据库

本文关键字:SQL 数据库 窗体 窗口 身份验证 Web | 更新日期: 2023-09-27 17:57:12

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

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

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

Web 窗体窗口身份验证与远程 SQL 数据库

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