创建站点无限用户密码哈希

本文关键字:密码 哈希 用户 无限 站点 创建 | 更新日期: 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>

无论如何,以清晰的方式存储密码不是一个好的做法。相反,您应该为用户提供一个界面来重置其密码。至少您应该生成一个新密码并将新密码发送给他们(当然他们必须能够更改它)。这样,可以在将密码保存到数据库中之前对密码进行哈希处理。