【问题标题】:How to manually validate user in ASP.NET MVC Internet Application template如何在 ASP.NET MVC Internet 应用程序模板中手动验证用户
【发布时间】:2012-12-14 23:09:48
【问题描述】:

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

我计划对我的 Web API 使用基本身份验证,所以我只需要在 http 标头中传递用户名/密码。我可以使用 Thinktecure.IdentityModel 拦截消息。这是一个使用 ASP.NET Membership 的example

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

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

我不清楚如何使用 SimpleMembership 的数据库手动验证凭据。我可以获取用户配置文件,但不知道如何检查配置文件的密码。

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

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

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

感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 嗨,马克——ValidateUser() 对我不起作用。明天我会更新这个问题,提供更多细节。并感谢哈希密码的链接,这看起来很有希望!
    • @brudert 好东西,让我知道 ValidateUser() 的错误是什么,我们可以修复它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多