如何在ASP.NET MVC Internet应用程序模板中手动验证用户

时间:2012-12-14 23:09:48

标签: asp.net-mvc entity-framework asp.net-web-api

我是网络安全的新手,所以我不想实现自己的安全。我打算通过VS2012模板将SimpleMembership用于ASP.NET MVC Internet应用程序。问题是我需要通过Web API传递数据。

我打算对我的Web API使用基本身份验证,所以我只需要在http标头中传递username / pass。我可以使用Thinktecure.IdentityModel截取消息。这是使用ASP.NET成员资格的example

authConfig.AddBasicAuthentication((userName, password) =>  
  Membership.ValidateUser(userName, password));

我可以用自己的bool函数替换Membership.ValidateUser。我已成功使用用户名/密码查询我的自定义数据库,一切正常。但是,我使用模板的用户数据库,因为我不想存储字符串(甚至编码)密码。

我不清楚如何使用SimpleMembership数据库手动验证凭据。我可以获取UserProfile,但无法弄清楚如何查看个人资料的密码。

UserProfile user = context.UserProfiles.Find(1);

==OUTPUT==
user
    UserId: 1
    UserName: "bob"

您知道如何检查输入的密码是否与现有用户的密码匹配吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

为什么你没有使用Membership.ValidateUser?这不仅限于ASP.NET成员资格,假设您在正确的位置具有[InitializeSimpleMembership]here)属性或者在其他地方自己执行了逻辑,并且您具有对WebMatrix等的正确引用您仍然可以拨打Membership.ValidateUser,然后使用SimpleMemberships Validate user

如果你想自己去数据库,并假设你使用哈希密码等,那么this文章可能会有所帮助,因为你需要在选择它之前散列你输入的密码,其余的只是编写一些EF或(任何其他数据库访问方法)来从用户表中选择用户名和散列密码匹配。但我认为没有明显的理由这样做,因为Membership.ValidateUser会为你做这一切。