2

.Net 4 で作成したメンバーシップ データベースを、新しく作成した .Net 4.5 メンバーシップ データベースに移動しようとしています。.Net 4.5 データベースには、古い .Net 4 データベースとは異なるスキーマがあります。そこで、新しい 4.5 メンバーシップ データベースを作成し、ユーザーを再作成しようとしています。

古いデータベースからユーザーを選択し、Membership.CreateUser() を使用してこれらのユーザーを新しいメンバーシップ データベースに再作成しています。彼らのパスワードも必要なので、SQL UPDATE ステートメントを使用して、Membership テーブルの Password フィールドと PasswordSalt フィールドを古いデータベースと同じ値に設定しています。

新しいユーザーは問題なくログインできますが、コピーされたユーザーは、前述のようにログインできません (「ログイン試行は成功しませんでした。もう一度やり直してください。」)

ログインしようとすると「FailedPasswordAttemptCount」が増加することがわかります..ユーザーを見つけています..問題はパスワードまたはパスワードの復号化にあるはずです。

パスワードをコピーしようとすると、何が間違っていますか? 両方のデータベースが同じマシン上にあります...確かにパスワードとパスワードソルトはそれを解読するのに十分なはずですか?

4

1 に答える 1

1

まず、あなたの状況のパスワードは解読されず、ユーザーが送信したパスワードはハッシュされ、データベースに保存されているハッシュと比較されます。ハッシュは、通常、マシン キーで機能しますが、これWeb.Configは IIS の および異なるバージョンで変更できます。

元のデータベースのコピーを作成してから、それに対して .net 4.5 ASPNET_REGSQL を実行して、適切に更新されるかどうかを確認できます。更新されるとは思えませんが、試してみる価値はあります。

私が最初に行うことは、Web.ConfigファイルのProvidersセクションを調べて、古いプロジェクト バージョンと同じであることを確認することです。これにより、パスワードの形式が決まります。運が良ければ、これが問題になると思いますが、問題があるとは思えません。

また、(データベース内のユーザー数によっては) プログラムや Web サイトを介してパスワードを解読できる場合もあります。これは時代遅れですが、役立つかもしれません。平文のパスワードを取得できる場合は、そのようにユーザーを再作成できます。

ハッシュ プロセスがバージョン 4.0 から 4.5 に変更されたことを示すものは見つかりませんでしたが、変更された場合は、カスタム ハッシュ アルゴリズムを定義する必要があるかもしれません。基本的に、.net 4.0 と同じ方法でハッシュを再作成する必要があります。

最初の検証が失敗した場合は、パスワードに対して 2 回目の手動検証を試みることもできます。このようなもの。

PasswordFormat 値は、ASP.NET アプリケーションの Web.config ファイルの providers セクションで指定されます。

暗号化されたパスワードとハッシュ化されたパスワードは、構成の machineKey 要素で指定された情報に基づいて、既定で暗号化またはハッシュ化されます。検証属性に 3DES の値を指定した場合、または値が指定されていない場合、ハッシュされたパスワードは SHA1 アルゴリズムを使用してハッシュされることに注意してください。

カスタム ハッシュ アルゴリズムは、メンバーシップ構成要素の hashAlgorithmType 属性を使用して定義できます。暗号化を選択した場合、デフォルトのパスワード暗号化では AES が使用されます。machineKey 構成要素の復号化属性を設定することにより、暗号化アルゴリズムを変更できます。パスワードを暗号化する場合は、machineKey 要素の decryptionKey 属性に明示的な値を指定する必要があります。ASP.NET メンバーシップで暗号化されたパスワードを使用する場合、decryptionKey 属性の AutoGenerate の既定値はサポートされません。

于 2012-08-23T07:50:42.980 に答える