27

新しい MVC4 RTM インターネット アプリケーション テンプレートは、ここで説明されているように SimpleMembership プロバイダーを使用します

私の既存の MVC Web サイトは ASP.Membership フレームワークを使用しており、理想的には、これらのテーブルのユーザー データを新しい SimpleMembership テーブルに移行したいと考えています。これをやりたい理由は次のとおりです。

  1. EF を使用する残りのデータベースとのよりクリーンな統合
  2. Azure と OAuth をすぐにサポート
  3. 変更せずに最新の MVC4 RTM コントローラー/ビューを使用
  4. 既存のメンバーシップの実装は、必要なものに対して少し肥大化していると常に感じていました

そこで、今日、既存の ASP.Net メンバーシップ テーブルのデータを新しいシンプル メンバーシップ テーブルに移行する SQL スクリプトを作成しました。これはここで見つけることができます

MVC 4 Web サイトでログインをテストすると、パスワードの検証が失敗します。SimpleMembership フレームワークで作成された新しいパスワードはずっと長く見えるため、SimpleMembership は古いメンバーシップ フレームワークとは異なるパスワード アルゴリズムを使用していると思います。

したがって、私の質問は、古い ASP.Net メンバーシップ プロバイダーで「ハッシュ化された」パスワード形式を使用していたため、ユーザーの元のパスワードは回復できないため、SimpleMembership プロバイダーを機能させるにはどのようなオプションが必要ですか。

いくつかのオプションがあると思います:

  1. ユーザーにパスワードをリセットしてもらう
  2. 古い ASP.Net メンバーシップ プロバイダーと同じパスワード アルゴを使用するように SimpleMembership プロバイダーを取得します。
  3. 新しい MVC 4 RTM インターネット アプリケーション テンプレートを元に戻し、古い ASP.Net MemberShip プロバイダーを使用します。SimpleMemberShip フレームワークを使用したいので、これは私にとって最も望ましくないオプションです。

また、既存のメンバーシップ データベースを新しい SimpleMemberShip プロバイダーに移行しようとしている人も多いと思います。

どんな助けでも大歓迎です。

乾杯

ジム

4

3 に答える 3

12

誰かがそれを見逃した場合に備えて、ポールのコメントを表面化し、彼の解決策が私が見た中で最高のものであることを示唆したいと思います.

http://pretzelsteelersfan.blogspot.com/2012/11/migrating-legacy-apps-to-new.html

ありがとうポール

于 2012-11-19T00:09:17.410 に答える
11

ユーザーがログインすると、プレーンテキストのパスワードにアクセスできるため、別のオプションが提供されます。

  1. 古いパスワードを別のテーブルに保管する
  2. ログイン時に、まず SimpleMembership メソッドを使用します
  3. それが失敗した場合は、古いハッシュ アルゴリズムを使用して古いパスワード テーブルと照合します (プレーン テキストのパスワードがまだコンテキスト内にあることを確認する必要があります)。
  4. それが成功した場合、SimpleMembership テーブルを更新し、古いパスワード テーブルから削除します。

ユーザーは変更について知る必要がなく、アクティブなユーザーはより安全なハッシュを使用できます。将来的にセキュリティのアップグレードを強制したい場合は、1 年間活動がないとアカウントが削除されることをユーザーに警告し、2 段階のシステムを廃止することができます。

于 2012-11-07T13:46:53.753 に答える
7

同様の問題がありました。これを行うためのチュートリアル/ブログ投稿を書くべきでしたが、私の解決策は、web.config に以下を追加することでした (これはオプション #2 に対応します)。

<system.web>

    <membership hashAlgorithmType="SHA1" defaultProvider="DefaultMembershipProvider">
      <providers>
        <add name="DefaultMembershipProvider" etc.../>
      </providers>
    </membership>
    <machineKey validation="SHA1" />
    ...
</system.web>

上記のコードの興味深い部分は、「hashAlgorithmType」です。これを SHA1 に設定すると、古い asp.net メンバーシップ ハッシュ アルゴリズムが使用されます。

私も同様の立場にあり、ユーザーにパスワードを更新するように依頼するか、特定のハッシュ アルゴリズムを維持する必要があります。

お役に立てれば!-シグ

于 2012-09-07T03:41:25.283 に答える