ASP.NET MVC中页面上的简单密码保护

时间:2011-04-06 12:03:14

标签: asp.net cookies forms-authentication machinekey

我希望在ASP.NET MVC应用程序中保护单个(动态)页面。

我不想使用完整的身份验证系统 - 我们已经在为站点管理员使用表单身份验证。相反,我们可以发送指向具有特定用户密码的页面的链接。

我目前正在处理的方式是,当提交有效密码时,我们创建一个包含页面ID(Guid)及其会话ID的加密cookie,并将它们重定向到页面。在我们的“页面”控制器操作中,我们然后验证此cookie。

第一个问题,这是最好的(最安全的)方法(除了使用表单身份验证)吗?

第二个问题,我可以读取Forms身份验证使用的机器密钥来执行加密,或者更好地使用FormsAuthentication来加密cookie(我能看到的唯一一个需要FormsAuthenticationTicket的重载)?

由于我们总是在部署之前生成新的机器密钥,因此如果我们所有的加密使用相同的密钥会更好。

[更新]

关于如何访问机器密钥,我在http://rich-rogers.com/archive/asp.net-c-sharp-encrypt-hash-using-machinekey-values

找到了答案

[更新2]

我在问这个问题之后才意识到,由于我需要维护一个他们可以访问的页面列表,我可能最好只将它们存储在当前会话中。我可以存储一个有效期的安全令牌列表。由于我已经有了一个包装会话,所以这也很容易进行单元测试。

1 个答案:

答案 0 :(得分:1)

为了使您的cookie密钥真正安全,您需要使其仅在SSL页面上可用,否则有人可以获得它,即使加密它也可以使用它。

    Request.Cookies[cookieName].HttpOnly = true;
    Request.Cookies[cookieName].Secure = true;

另请阅读:Can some hacker steal the cookie from a user and login with that name on a web site?