2009-08-17 8 views
0

私は現在、ASP.NET Webアプリケーションで非常に基本的なカスタム実装MembershipProviderを使用しています。会員増強のための私の要求として、SqlMembershipProviderのような既存の、完全な機能を持ち、よくテストされた実装を使うのは大変意味があるようです。私はカスタムテーブルからユーザーを作成するaspnet_Memebershipストアドプロシージャを使用する方法を考え出しましたが、私はパスワードに固執しています。私のカスタム実装ではsaltは使用されず、SqlMembershipProviderはそれを必要とするようです。カスタムメンバシッププロバイダからSqlMembershipProviderに移行する方法

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

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

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

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

+0

個人的に、私は標準のメンバシッププロバイダにお尻の痛みを見つけ、そして.. YMMV基本的には完全に使用できなくなる:P – Thorarin

+0

@Thorarin - あなたはSqlMembershipProviderについて何を好きではないのですか? – jrummell

+0

私は数日後にユーザーを移行しようとしたが、あきらめました。私は欠けている機能をカスタムプロバイダに追加するつもりです。 – jrummell

答えて

1

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

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

また、あなたは、おそらくのMembershipProviderを継承する独自のクラスを書くことができるが、これは多くの作業になります。

1

SqlMembershipのユーザーは、空の塩を手動で(ストアドプロシージャを使用して)作成することをお勧めします。

問題が解決しない場合、私はあなたがSqlMembershipProviderと運のうちだと思うが、あなたは常に(おそらくはSqlMembershipProvider自身のバックエンドに基づいて)MembershipProviderあなた自身を書くことができます。それほど難しいことではありません。

+0

@Ruben - あなたとAxlはどちらも答えのクレジットを得るに値するが、Axlは担当者をもっと必要とする:) – jrummell

+0

私はそれを生きることができる:-) – Ruben

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

    } 


} 
関連する問題