0

私は現在、ASP.NETWebアプリケーションでMembershipProviderの非常に基本的なカスタム実装を使用しています。メンバーシップの要件が増えるにつれて、 SqlMembershipProviderのような既存の、フル機能の、十分にテストされた実装を使用することは非常に理にかなっているようです。aspnet_Memebershipストアドプロシージャを使用してカスタムテーブルからユーザーを作成する方法を理解しましたが、パスワードに固執しています。私のカスタム実装はsaltを使用しておらず、SqlMembershipProviderがそれを必要としているようです。

これがユーザーにとってスムーズな移行であり、変更後に初めてログインするときに全員がパスワードを更新する必要がないようにしたいと思います。

ハッシュ化されたパスワードをカスタム実装(以下を参照)からSqlMemberhipProviderに移行するにはどうすればよいですか?

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

更新:私のカスタムプロバイダーはMembershipProviderの実装であり、フル機能のプロバイダーではないことを明確にする必要があります。また、_Membership空のソルトでaspnet _CreateUserを使用しようとしましたが、ハッシュが一致しません。

4

3 に答える 3

1

ソルト(ソルトとパスワードを組み合わせた最初の16バイト)を削除するカスタムハッシュアルゴリズムを作成できます。

http://forums.asp.net/t/981295.aspx

あるいは、MembershipProviderを継承する独自のクラスを作成することもできますが、これはより手間がかかります。

于 2009-08-17T18:45:45.150 に答える
1

最善の策は、空のソルトSqlMembershipを使用して(ストアドプロシージャを介して)手動でユーザーを作成することです。

それがうまくいかない場合は、運が悪いと思いますが、SqlMembershipProviderいつでも自分で書くことができます(おそらく、自分のバックエンドにMembershipProvider基づいていても)。SqlMembershipProviderそれほど難しいことではありません。

于 2009-08-17T19:03:17.377 に答える
0

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
        */

    }


}
于 2012-02-07T18:58:16.750 に答える