表单身份验证和安全

时间:2011-08-02 19:02:57

标签: c# asp.net-mvc forms authentication

我正在创建一个Web应用程序(C#,MVC3)并试图找出记录用户的最佳实践。我坚持使用内置的FormsAuthentication框架和自定义成员资格提供程序来验证用户。但问题是,有很多用户信息(名字,姓氏,用户ID,上次登录日期等)我想保存在某处,以便在我的代码中轻松访问。

首先想到的是超载IIdentity和IPrincple,但我读到他们需要每个页面加载数据库命中。然后我在考虑使用cookies,但有些帖子说将敏感信息存储在其中是不明智的。

任何建议都会很棒。

2 个答案:

答案 0 :(得分:2)

您仍然可以使用FormsAuthentication。 敏感用户信息可以存储在FormsAuthenticationTicket.UserData属性中。 并且它是安全的 - 在FormsAuthenticationModule序列化后,身份验证Cookie由FormsAuthenticationTicket加密。

答案 1 :(得分:1)

我在我的应用程序中创建了一个名为MiniUserModel的类,它包含我需要的一些信息,包括用户ID,名称等,但没有超敏感。

我将该实例序列化为JSON,加密JSON字符串,并将值写入Cookie。

这使我可以在每个页面视图上轻松访问数据,而无需重新查询数据库。由于我的对象很小,因此cookie和生成的请求占用空间不会受到不利影响。但是,这确实为每个请求的解密和反序列化添加了“一些”开销。 (您可以对其进行分析以查看它是否存在问题...在我的情况下它不是。)

如果您采用这种方法,请务必在用户更改信息时确保更新Cookie值。