web-dev-qa-db-ja.com

MVC4でのASP.NETメンバーシップからSimpleMembershipへの移行RTM

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

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

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

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

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

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

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

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

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

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

乾杯

ジム

27
Jim Culverwell

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

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

ありがとうポール

12
Jim Culverwell

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

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

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

11
Jerph

同様の問題がありました。これを行うためのチュートリアル/ブログ投稿を書く必要がありましたが、私の解決策は、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メンバーシップハッシュアルゴリズムが使用されます。

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

お役に立てれば! -シグ

7
Sig Myers