2012-07-13 191 views
2

我正在创建一个我希望用户注册的个人网站。我一直在寻找各种需要采取的安全措施,并对我必须注意的主要事情感到好奇。我决定不使用ASP.NET Forms身份验证,主要是为了自己创建身份验证过程的乐趣。以下是我迄今所做:未使用表单身份验证的身份验证

  • 我有我在哪里存储用户的登录信息的MySQL数据库,如自己的密码和盐
  • 在登录时的哈希值,设置等于会话他们的用户名 - 这使我想到了这个问题:这是不使用表单身份验证来跟踪登录用户的最佳方式吗?例如,设置会话想是这样的:

    Session["User"] = username;

有没有一种更好的方式去有关跟踪登录的用户?或者这是一种可以接受但仍然安全的处理事物的方式?

+0

你可能会想设定的语境(自定义)校长。 – 2012-07-13 15:10:19

+0

那么你是在重新发明轮子吗?很公平,我也是这样做的。其核心内容“Forms Authentication”实际上非常简单,它存储了经过认证的用户信息的加密烹饪。整个过程,包括存储的信息以及如何存储,都可以定制。使用会话状态本质上是做同样的事情,只有用户信息存储在服务器上。我真的会建议定制'Forms Authentication',而不是从头开始。 – Nathan 2012-07-13 15:38:34

+1

如果你甚至不能自己开始,那么你没有写你自己的认证系统的业务,你会执行它错误的。至少要实现系统内部构建,并弄清楚它是如何工作的。 – 2012-07-13 15:51:35

回答

1

在我看来,更好的方法是在加密的cookie的用户信息,这样,您的服务器不需要跟踪会话的每个用户的。它比会话更可靠。你可以做的是仅使用从FormsAuthentication创建安全身份验证cookie的机制,并使用自己的授权。

public void OnLoginClick(object sender, EventArgs e) 
    { 
     if(MySqlValidUser(username, pass) // this is where you would check if user is valid 
     { 
      FormsAuthentication.SetAuthCookie(username, null); 
      Response.Redirect("/"); 
     } 
    } 

如果启用了窗体身份验证您可以轻松地访问你的asp.net页面

<authentication mode="Forms" /> 
+0

完美!今天的某个时候我会试试看看我能做些什么。谢谢! – 2012-07-13 15:33:33

1

User.Identity.Name或User.IsAuthenticated这样,有没有更好的方式去关于跟踪登录用户?

Microsoft设计了Forms Authentication以使用加密的Cookie,以及使用querystring的无Cookie后备。所以他们显然认为这比使用Session更好。

一个优点是,用户不会被自动注销,如果他的会话丢失(超时,但如果应用程序使用InProc会话时回收,也可以失去 - 这是默认的)。

如果你真的想“滚你自己”,我建议你考虑:

  1. 编写自定义的MembershipProvider,将与FormsAuthentication基础设施工作,但让你学习一些有关的实施细则。

  2. 或学习的FormsAuthentication设计,并试图复制大部分(例如:你可能会忽略对Cookie的身份验证支持)。