创建站点无限用户密码哈希
本文关键字:密码 哈希 用户 无限 站点 创建 | 更新日期: 2023-09-27 17:56:39
我正在寻求有关 telerik sitefinity 后端功能的帮助。我正在以编程方式从自定义辐射网格创建用户。我用来创建 sitefinity 用户的代码如下:
public MembershipCreateStatus AddUser(UserModel model, Role role)
{
var userManager = UserManager.GetManager();
var profileManager = UserProfileManager.GetManager()
var roleManager = RoleManager.GetManager("AppRoles");
MembershipCreateStatus status;
userManager.Provider.SuppressSecurityChecks = true;
var user = userManager.CreateUser(model.UserName, model.Password, model.Email,
model.SecretQuestion, model.SecretAnswer, true, null, out status);
if(status == MembershipCreateStatus.Success)
{
roleManager.AddUserToRole(user, role);
roleManager.SaveChanges();
var profile = profileManager.CreateProfile(user, Guid.NewGuid(),
typeof(SitefinityProfile)) as SitefinityProfile;
if (profile != null)
{
profile.FirstName = model.FirstName;
profile.LastName = model.LastName;
//Set any Data Extended Properties below
}
profileManager.RecompileItemUrls(profile);
profileManager.SaveChanges();
userManager.SaveChanges();
}
return status
}
这将让我创建一个 sitefinity 用户,我可以看到该用户存储在sf_users表中。我遇到的问题是,如果他们忘记了密码,我需要一种方法来查找并向用户发送密码。密码经过哈希处理,并以加密格式保存在数据库的表中。我一直在寻找有关如何将密码格式更改为明文或类似内容的文档,但我还没有找到任何有用的东西。
如果有人知道如何完成此操作,以便我可以将密码保存为数据库中的明文,那就太好了。
Sitefinity Membership Provider旨在以与SQL会员提供程序类似的方式工作。它支持三种模式 - 哈希(默认),加密和清除。哈希格式是默认格式。更多信息请见:http://www.sitefinity.com/documentation/documentationarticles/developers-guide/deep-dive/security/users/password-format。
散列密码是不可逆的,您无法使用散列密码格式实现所需的内容。相反,您可以通过使用清除(强烈建议不推荐)或加密(也不是一个好的安全实践)来实现此目的。
但是,CMS允许您重置密码功能或检索。如果使用哈希格式,则重置,如果使用加密,则检索。本文介绍了这两种方法: http://www.sitefinity.com/developer-network/knowledge-base/configuring-password-recovery-in-sitefinity。
SiteFinity是如何工作的,但它似乎使用了MembershipProvider
。因此,密码格式设置取决于所使用的提供程序,并且可以在web.config
文件中进行更改。
例如 (http://msdn.microsoft.com/en-us/library/system.web.security.sqlmembershipprovider.aspx)
<system.web>
<membership defaultProvider="SqlProvider">
<providers>
<add
name="SqlProvider"
type="System.Web.Security.SqlMembershipProvider"
passwordFormat="Clear" />
</providers>
</membership>
</system.web>
无论如何,以清晰的方式存储密码不是一个好的做法。相反,您应该为用户提供一个界面来重置其密码。至少您应该生成一个新密码并将新密码发送给他们(当然他们必须能够更改它)。这样,可以在将密码保存到数据库中之前对密码进行哈希处理。