Asp.net 如何从自定义成员资格提供程序迁移到SqlMembershipProvider?

Asp.net 如何从自定义成员资格提供程序迁移到SqlMembershipProvider?,asp.net,membership,sqlmembershipprovider,Asp.net,Membership,Sqlmembershipprovider,我目前正在ASP.NET web应用程序中使用非常基本的自定义实现。随着我对成员资格要求的提高,使用现有的、功能齐全的、经过良好测试的实现(如)似乎非常有意义。我已经知道如何使用aspnet_Memebership存储过程从我的自定义表创建用户,但我仍然无法确定密码。我的自定义实现不使用salt,SqlMembershipProvider似乎需要它 我希望这是一个平稳的过渡,为我的用户,而不是要求每个人更新他们的密码后,他们第一次登录更改 如何将哈希密码从自定义实现(见下文)迁移到SqlMemb

我目前正在ASP.NET web应用程序中使用非常基本的自定义实现。随着我对成员资格要求的提高,使用现有的、功能齐全的、经过良好测试的实现(如)似乎非常有意义。我已经知道如何使用aspnet_Memebership存储过程从我的自定义表创建用户,但我仍然无法确定密码。我的自定义实现不使用salt,SqlMembershipProvider似乎需要它

我希望这是一个平稳的过渡,为我的用户,而不是要求每个人更新他们的密码后,他们第一次登录更改

如何将哈希密码从自定义实现(见下文)迁移到SqlMemberhipProvider?

FormsAuthentication.HashPasswordForStoringInConfigFile(password, FormsAuthPasswordFormat.SHA1.ToString())

更新:我应该澄清,我的自定义提供者是MembershipProvider的一个实现,而不是一个功能齐全的提供者。此外,我还尝试使用aspnet
\u Membership
\u CreateUser和空salt,但哈希不匹配。

您可以编写一个自定义哈希算法来删除salt(组合salt和密码的前16个字节)


或者,您也可以编写自己的继承MembershipProvider的类,但这将是更多的工作。

您最好的选择是尝试使用空salt手动(通过存储过程)创建
SqlMembership
的用户


如果这不起作用,我认为您在使用
SqlMembershipProvider
时运气不好,但您始终可以编写自己的
MembershipProvider
(甚至可能基于
SqlMembershipProvider
自己的后端)。这并不难。

覆盖System.Web.Security.SqlMembershipProvider 类,并重写需要自定义的尽可能多或尽可能少的方法

此处未看到web.config。但事实上,你有自己的自定义一个工作在第一位,我不认为这部分是一个绊脚石点

public class SqlMembershipProviderOverride : System.Web.Security.SqlMembershipProvider
{
    public static readonly string FORCED_OVERRIDE_APPLICATION_NAME = "MyApplicationName";

    public SqlMembershipProviderOverride()
    {
        this.ApplicationName = FORCED_OVERRIDE_APPLICATION_NAME;
    }

    public override System.Web.Security.MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out System.Web.Security.MembershipCreateStatus status)
    {
        return base.CreateUser(username, password, email, passwordQuestion, passwordAnswer,    isApproved, providerUserKey, out status);
        /*
              Do "your own thing" in this or any other override method
        */

    }


}

就我个人而言,我觉得标准会员资格提供商是个麻烦,基本上完全无法使用。。YMMV:P@Thorarin-您不喜欢SqlMembershipProvider的哪些方面?在尝试迁移用户几天后,我放弃了。我只是想将缺少的功能添加到我的自定义提供程序中。@Ruben-你和Axl都应该获得应答积分,但Axl更需要代表:)