代码之家  ›  专栏  ›  技术社区  ›  Dudeinco

ASP。NET 3.5多角色提供程序

  •  0
  • Dudeinco  · 技术社区  · 9 年前

    我有一个ASP。NET3.5应用程序,我最近用多个成员资格和角色提供程序扩展了该应用程序,以在该应用程序中“附加”第二个应用程序。我无法直接访问IIS配置,因此无法将其分离到单独的应用程序目录中。

    我遇到的问题是,当我创建一个用户名与其他成员身份相同的用户(在目录上使用web.config角色)时,我能够手动将URL切换到其他应用程序,它会获取用户名,并加载该应用程序的角色。显然,这是不好的,因为它允许用户创建有权访问其他应用程序的用户的用户名,并以其他用户的角色进入其他应用程序。

    我如何减轻这种情况?如果我只能使用一个应用程序,使用多个角色和成员资格提供程序,而authcookie存储的用户名显然是可转移的,那么我能做些什么吗?

    我意识到情况并不理想,但这些都是目前强加的限制。

    验证示例(验证后):

    FormsAuthentication.SetAuthCookie(usr.UserName, false);
    

    为了区分这两个提供者,这个cookie需要基于我怀疑的用户令牌,而不是用户名?这可能吗?

    2 回复  |  直到 9 年前
        1
  •  0
  •   ewitkows    9 年前

    您尝试过在成员身份连接字符串中指定applicationName属性吗?

    https://msdn.microsoft.com/en-us/library/6e9y4s5t.aspx?f=255&MSPPError=-2147217396

        2
  •  0
  •   Dudeinco    9 年前

    也许这不是我想要的答案,但我能够通过让一个应用程序使用authcookie的用户名,而另一个使用ProviderUserKey(guid)来区分这两者。这样,身份验证cookie将无法从一个“应用程序”识别到另一个。

    FormsAuthentication.SetAuthCookie(user.ProviderUserKey.ToString(), false);
    

    这需要我处理一些有点奇怪的事情,但归根结底就是添加一些扩展方法,并通过我自己的类处理许多成员实用程序(我无论如何都在这么做)。

    例如,扩展方法:

    public static string GetUserName(this IPrincipal ip)
    {
        return MNMember.MNMembership.GetUser(new Guid(ip.Identity.Name), false).UserName;
    }
    

    其中,MNMember是一个静态类,MNMersbership返回辅助成员资格提供程序,而GetUser是成员资格提供器的标准函数。

    var validRoles = new List<string>() { "MNExpired", "MNAdmins", "MNUsers" };
                var isValidRole = validRoles.Intersect(uroles).Any();
                if (isValidRole)
                {
                    var userIsAdmin = uroles.Contains("MNAdmins");
                    if (isAdmin && !userIsAdmin)
                    {
                        Response.Redirect("/MNLogin.aspx");
                    }
                    else if (!userIsAdmin && !uroles.Contains("MNUsers"))
                    {
                        Response.Redirect("/MNLogin.aspx");
                    }...
    

    其中,isAdmin正在检查路径中是否显示子目录。

    看起来很烦人,但似乎也很管用。

    编辑:现在我没有使用用户名作为令牌,我应该可以回去使用网络了。配置目录安全性,这意味着母版页黑客应该能够被删除。(理论上?)

    编辑2:Nope-asp。net使用用户名authcookie解析web.config中指定的角色。