我正在使用ASP.NET和MVC4来开发系统。身份验证/授权由simpleMembership完成。
我的团队(我们属于公司)需要从同一公司的其他团队的api检索数据(用户在两个系统上都有相同的用户名/密码)。
api有一个函数getUserID(用户名,密码)。
数据库中的密码已加密。
我如何获取用户的加密密码,以便调用API的该功能?
我试图像那样做
SimpleMembershipProvider provider = new SimpleMembershipProvider();
string name = provider.GetPassword("testUser1");
但是上面也需要一个字符串答案。
我不想找到用户的明文密码,只是为了获取用户的哈希密码。
由于
答案 0 :(得分:1)
如果您调用MembershipUser.GetPassword,您将获得一个未实现的异常,因为MembershipUser适用于旧的ASP.NET提供程序。您在使用成员资格提供程序模型时通常会遇到的一些挫折感。
在SimpleMembership中,密码存储在与用户配置文件信息不同的表/实体中,称为webpages_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();