创建Sitefinity用户密码哈希

时间:2014-04-05 00:10:54

标签: c# asp.net sitefinity

我正在寻求有关telerik sitefinity后端功能的一些帮助。我正在以编程方式从自定义radgrid创建用户。我用来创建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表中。我遇到的问题是我需要一种方法来查找并向用户发送忘记密码的密码。密码经过哈希处理并以加密格式保存在数据库的表中。我已经找到了关于如何更改密码格式以清除文本或类似内容的文档,但我找不到任何有用的东西是不成功的。

如果有人知道如何完成此操作,以便我可以将密码保存为数据库中的明文,那么这将非常棒。

2 个答案:

答案 0 :(得分:1)

Sitefinity成员资格提供程序旨在以与SQL成员资格提供程序类似的方式工作。它支持三种模式 - 哈希(默认),加密和清除。哈希格式是默认格式。更多信息请访问:http://www.sitefinity.com/documentation/documentationarticles/developers-guide/deep-dive/security/users/password-format

散列密码是不可逆转的,您无法使用散列密码格式实现所需的密码。相反,你可以通过使用Clear(强烈不推荐)或加密(也不是一个好的安全实践)来实现这一点。

但CMS允许您重置密码功能或检索。如果使用Hashed格式则重置,如果使用Encrypted则检索。本文解释了两种方法:http://www.sitefinity.com/developer-network/knowledge-base/configuring-password-recovery-in-sitefinity

答案 1 :(得分:0)

我不知道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>

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