【问题标题】:How do I set a default role for a new user using Windows Authentication with the SqlRoleProvider?如何使用带有 SqlRoleProvider 的 Windows 身份验证为新用户设置默认角色?
【发布时间】:2008-12-09 20:13:44
【问题描述】:

我有一个应用程序,它分别使用 Windows 身份验证和 SqlRoleProvider 进行用户身份验证和角色管理。它适用于我作为默认值添加到数据库中的测试用户。该应用程序要求用户登录(使用 Windows 凭据),然后才能将此内部应用程序用作基本“用户”。如果需要将用户添加到高级角色,管理员将在首次登录后负责此操作。

话虽如此,我如何在用户首次登录时将其添加到默认角色?从逻辑上讲,我知道我需要调用 Roles.IsUserInRole() ,如果不是,则添加它们;但是,我会在哪里做呢?我无法在 Global.asax 中找到要使用的事件。

谢谢

编辑: 为了稍微扩展一下场景,由于需要编写新的提供程序以允许将连接字符串存储在 web.config 之外,我没有使用完整的会员提供程序系统。我没有使用任何形式的注册或登录页面,而是让 IIS 中的 Windows 集成身份验证处理身份验证方面,而我增强的 SqlRoleProvider 管理用户角色。对于我通过硬编码测试设置角色的用户,该系统运行良好。我只是在寻找一种添加新用户(将由 IIS 进行身份验证)以立即添加到默认“用户”角色的方法。我想我找到了;但是,出于性能原因,我现在正在研究使其不会在每个请求时触发的方法。

【问题讨论】:

    标签: c# asp.net security windows-authentication


    【解决方案1】:

    在挖掘和玩了更多之后,我能够找到解决方案。我将以下代码添加到我的 Global.asax 文件中,它正在实现我所希望的。

    protected void WindowsAuthentication_OnAuthenticate(object sender, WindowsAuthenticationEventArgs e)
    {
        if (!Roles.IsUserInRole(e.Identity.Name, "Users"))
        {
            Roles.AddUsersToRole(new string[] { e.Identity.Name }, "Users");
        }
    }
    

    我很担心,因为每次页面请求都会触发此代码。有没有更好的方法来限制这种情况发生?我应该将此代码添加到登录页面的 page_load 事件而不是 Global.asax 吗?

    【讨论】:

      【解决方案2】:

      我会在获取用户后直接为用户添加默认角色。

      类似的东西:

      user = Membership.GetUser()
      if (user != null)
      {
        // default role 
        string[] defaultRoles = {"MyRole"};
      
        AddUsersToRoles(user, defaultRoles); 
      
      }
      

      【讨论】:

        【解决方案3】:

        登录或注册时为什么不放呢?

        登录时,处理该事件并将其放入。每次登录时检查。

        【讨论】:

        • 由于我使用的是 Windows 身份验证,WindowsAuthentication_OnAuthenticate 将是登录事件,并且会在基于 WindowsAuthenticationModule 的每个请求时触发。我目前没有使用任何登录表单或其他注册表单。我没有使用会员资格;只有角色。
        猜你喜欢
        • 2013-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多