【问题标题】:Get hashed password SimpleMembership获取哈希密码 SimpleMembership
【发布时间】:2014-01-23 00:45:24
【问题描述】:

我正在使用 ASP.NET 和 MVC4 开发一个系统。身份验证/授权由 simpleMembership 完成。

我的团队(我们属于一家公司)需要从同一公司的其他团队的 api 中检索数据(用户在两个系统中具有相同的用户名/密码)。

该api有一个函数getUserID(username,password)。

数据库的密码是加密的。

如何获取用户的加密密码,以便调用 API 的该功能?

我正在尝试这样做

    SimpleMembershipProvider provider = new SimpleMembershipProvider();
    string name = provider.GetPassword("testUser1");

但上述内容也需要一个字符串答案。

我不想找到用户的明文密码,只是为了获取用户的哈希密码。

谢谢

【问题讨论】:

  • 你试过provider.GetUser("username", false).GetPassword()那个方法有两个重载,其中一个是无参数的。告诉我。

标签: asp.net asp.net-mvc-4 membership-provider simplemembership


【解决方案1】:

如果您调用 MembershipUser.GetPassword 您将得到一个未实现的异常,因为 MembershipUser 适用于旧的 ASP.NET 提供程序。只是您在使用会员提供者模型时通常会遇到的一些挫折。

在 SimpleMembership 中,密码存储在与用户个人资料信息不同的表/实体中,称为 pages_Membership。 SimpleMembership 使用 EF 代码优先,但除了 UserProfile 之外,它不会让您直接访问它使用的其他实体。其他一切都隐藏在 WebSecurity 类后面。所以如果这个类没有为你提供你需要的东西,我知道的唯一方法是直接访问数据库。这是我验证的一种方法。

  var context = new UsersContext();
  var username = User.Identity.Name;
  int userId = WebSecurity.GetUserId(username); 
  string sqlCmd = "select Password from webpages_Membership where UserId = " + userId.ToString();
  string password = context.Database.SqlQuery<string>(sqlCmd).FirstOrDefault();

【讨论】:

  • 嗨...但是这个密码不能用于登录。我尝试使用用户名和数据库加密(或散列?)密码制作 Websecurity.Login,但没有成功。
  • @ilanS - 表中的密码是哈希和盐的组合。为了比较用户输入的密码和存储在数据库中的密码,您必须使用与 ASP.NET 身份使用存储盐完全相同的哈希算法。
  • Tnx 用于回答。我该怎么做?
猜你喜欢
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 2015-03-30
相关资源
最近更新 更多