ASP.Net MVC4登录会话有什么好的做法?

时间:2013-10-07 14:45:24

标签: asp.net asp.net-mvc session asp.net-mvc-4

目前,我的网站在用户输入数据库和IP地址旁边存储会话ID,然后将其存储在cookie中。如果会话ID和IP地址在每个页面上匹配,那么我们授予他们访问权限。 这似乎很好,但我们希望允许人们在多个IP地址/多个会话上登录网站。

所以我只是想知道最好和最安全的方式是什么?我们只是在会话中存储用户名和密码,我们是否在会话中存储用户名和哈希值,或者我们只是在数据库的新“会话”表中存储唯一ID,并在其旁边显示用户ID?那么我们只将会话ID存储在Cookie中吗?

我不确定会话篡改是否是一件事,但我通常认为精英可能会这样做,所以我尽量保证安全。我知道编辑Cookies也很简单。

该网站在后台使用Web服务。当用户输入他们的登录详细信息时,他们会被发送到服务并进行检查,然后返回yay或nay。 原因是该服务由不同平台的多个应用程序使用。所以Basic / Simple Membership模型在这里不会真正起作用。

2 个答案:

答案 0 :(得分:1)

我设法通过以下指南完成此操作:http://www.codeproject.com/Articles/13032/Custom-MembershipProvider-and-RoleProvider-Impleme 和这里: http://logcorner.wordpress.com/2013/08/28/how-to-configure-custom-membership-provider-using-asp-net-mvc4-with-external-login-like-facebook-yahoo-google-or-other-relying-party-accounts-2/

我设法通过覆盖客户成员资格所需的方法并使他们检查我们的服务并相应地做出响应来使其与我们的服务合作。它很棒。

实施例

    public override bool ValidateUser(string username, string password)
    {
        MyUser newUser = new MyUser 
        {
            EMail = username,
            Password = password
        };

        try
        {
            MyUser user = MyService.Authenticate(newUser);
            if (user.EMail != null && user.IsActivated)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        catch (Exception e)
        {
            return false;
        }

    }

它还可以使用MembershipCreateStatus注册新用户。这让我真正指出了为什么会出现问题的细节,而不仅仅是像以前那样抛出错误。 谢谢你指出我正确的方向Mystere Man。

答案 1 :(得分:0)

  

如果会话ID和IP地址在每个页面上匹配,那么我们授予   他们访问。

您是否考虑过IP addresses are far from secure。此外,他们有可能在一次会议中合法地改变。

听起来你已经推出了自己的安全措施,如果你在这方面有很好的经验,这可能会很好。

我建议您查看MVC开箱即用的安全性,例如查看oauth。它应该有你需要的东西。