none
ASP.NETのMembershipUser.ResetPassword()でパスワードの回答を引数に指定することなく、パスワードをリセットする方法について RRS feed

  • 質問

  • ASP.NETでWebアプリケーションを開発しています。
    ASP.NETのユーザ管理機構を使用して、フォーム認証を実装しました。
    また、このWebアプリケーションは、Roleを割り当て、管理者と一般ユーザに合わせて機能を切り換えています。
    管理者ユーザは、一般ユーザのパスワードをリセットできる機能を実装しようと考えています。

    MembershipUserのResetPassword()を使い、強制的にパスワードをリセットしようとしますが、ResetPassword()では、
    ”パスワードの回答”がなければリセットできません。
    Loginしていない別ユーザのパスワードを”パスワードの回答”なしでリセットさせるために、ResetPasswordに引数のない
    メソッドで呼び出す方法か、システムの構成で、”パスワードの回答”を必要としない設定をご存じの方は、ご助言いただけないでしょうか。

    よろしくお願いします。

    ちなみに、IISのフォーラムで質問しましたが、こちらのフォーラムがよいのでは。。。と助言をいただいたので、こちらにて質問させていただきます。
    また、web.configにrequiresQuestionAndAnswer="true"の設定を行えば、パスワードの質問や、古いパスワードをしらなくても、強制的に、パスワードをリセットできそうなのですが、この設定をどのように追加すればよいかを、教えていただければ幸いです。

    (IIS、ASP.NET初心者なもので初歩的な質問ですみません。)


    Reiji Tanaka
    2009年11月16日 8:34

回答

すべての返信

  • requiresQuestionAndAnswerの設定方法については以下が参考になるかと。

    http://dotnetfan.org/blogs/dotnetfanblog/articles/509.aspx


    この方法で強制的にリセットができるようになったかどうかはちょっと覚えてません。。。

    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    • 回答としてマーク Reiji 2009年11月17日 1:05
    2009年11月16日 10:23
  • こちらのフォーラムに移って議論をしたいのであれば「Internet Information Services
    7.x – 全般」の方のスレッドを閉じてくださいね。

    > また、web.configにrequiresQuestionAndAnswer="true"の設定を行えば、パスワ
    > ードの質問や、古いパスワードをしらなくても、強制的に、パスワードをリセット
    > できそうなのですが、この設定をどのように追加すればよいかを、教えていただけ
    > れば幸いです。

    requiresQuestionAndAnswer を false にするか true にするかは基本的な設計思想に
    かかわるところですので、そう簡単に変えるわけには行かないと思いますが、false にして
    しまっていいのでしょうか。

    それでよければ、小野さんが紹介されたサイトを参考に web.config のデフォルト設定を
    再定義を設定してください。以下のサイトも参考になると思います。分からないことがあった
    ら、ここで質問してください。

    membership 要素 (ASP.NET 設定スキーマ)
    http://msdn.microsoft.com/ja-jp/library/1b9hw62f(classic).aspx

    membership の providers の add 要素 (ASP.NET 設定スキーマ)
    http://msdn.microsoft.com/ja-jp/library/whae3t94.aspx


    requiresQuestionAndAnswer を true にしておきたいということですと、公開されているメ
    ソッドを使うには、「旧パスワード」か「パスワードの回答」のいずれかが必要です。

    でも、普通は両方ともユーザー本人以外にはわからないのが問題です。DB から直接取得
    しても、passwordFormat="Hashed" になっていたらお手上げです。

    残された手段は、カスタムプロバイダーを自作して、それに「旧パスワード」も「パスワードの
    回答」も不要なパスワード変更のためのメソッドを追加するほかないと思います。

    以下のサイトが参考になると思います。

    メンバシップ プロバイダの実装
    http://msdn.microsoft.com/ja-jp/library/f1kyba5e(VS.80).aspx

    サンプル メンバシップ プロバイダの実装
    http://msdn.microsoft.com/ja-jp/library/44w5aswa(VS.80).aspx

    2009年11月16日 14:20
  • 元のスレッドを参考としてリンクしておきます。

    http://social.msdn.microsoft.com/Forums/ja-JP/iis7ja/thread/2ded61af-6e5b-4be4-8720-e10db72b9102


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2009年11月16日 14:22
  • 小野@どっとねっとふぁん さん

    参考になる情報ありがとうございます。
    web.configを再定義することで、強制的にリセットできました。

    助かりました。
    Reiji Tanaka
    2009年11月17日 1:07
  • SurferOnWww さん

    ご助言ありがとうございました。
    「Internet Information Services 7.x – 全般」の方のスレッドは回答済として閉じさせていただきました。

    ひとつ問題提起されている件に回答させていただきます。

    > requiresQuestionAndAnswer を false にするか true にするかは基本的な設計思想に
    > かかわるところですので、そう簡単に変えるわけには行かないと思いますが、false にして
    > しまっていいのでしょうか。

    不特定向けのサイトでなく、閉じられたNetwork上で、閉じられたグループの人で共有する
    サイトなので、私の案件では、問題になりません。

    ただ、ご指摘いただいたように、一般向けのサイトとなると、以下の対策が必要になることは、
    今後の参考にさせていただきます。

    > 残された手段は、カスタムプロバイダーを自作して、それに「旧パスワード」も「パスワードの
     > 回答」も不要なパスワード変更のためのメソッドを追加するほかないと思います。


    いろいろなケースで、いろいろな改造の解決のための情報をいただき大変たすかりました。
    ありがとうございます。


    Reiji Tanaka
    2009年11月17日 1:14