7

Membership.ValidateUser メソッドは、開発サーバー (iis express と cassini) の両方で機能します。しかし、IIS (開発マシンでアプリケーションとして公開) では、常にfalseを返します。

ユーザーも承認され、ロックされておらず、ユーザー名とパスワードは正しいです。トレースエラーはありません。?

http リクエスト 1: davutg-pc: 6423 /BpmService/Login?userName=abc&password=0035

結果 1: < boolean > true < /boolean >

http リクエスト 2: davutg-pc/BPM/BpmService/Login?userName=abc&password=0035

結果 2 : < boolean > false < /boolean >

ここに私の設定があります

<roleManager enabled="true" defaultProvider="MySQLRoleProvider"/>

<machineKey validationKey="E8B40EEA5A8EFC6F...key" decryptionKey="385..." validation="SHA1" />

<membership defaultProvider="MySQLMembershipProvider"  hashAlgorithmType="SHA1">
  <providers>
    <remove name="MySQLMembershipProvider"  />
    <add type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web, Version=6.5.5.0, Culture=neutral, 
         PublicKeyToken=c5687fc88969c44d"
         name="MySQLMembershipProvider"
         connectionStringName="LocalMySqlServer"
         minRequiredPasswordLength="3"
         minRequiredNonalphanumericCharacters="0"
         requiresUniqueEmail="false"
         requiresQuestionAndAnswer="false"
         passwordFormat="Encrypted"/>

machine.config を比較したところ、Framework 64 と Framework は同じです。

開発サーバーでは機能しますが、IIS では常に false を返します。IIS でさまざまなサービスをクエリできますが、そのような問題はありません。

追加: 間違ったパスワードを入力すると、開発サーバーの"FailedPasswordAttemptCount" が増加しました。しかし、 IIS では変わりません。IIS の何が問題なのか。Membership.ValidateUser(user,pass) を呼び出すだけです

任意の提案をいただければ幸いです。

4

2 に答える 2

9

解決しました!これが誰かの時間を節約することを願っています。

問題はアプリケーション名でした。

ホスト:ポート/サービス

ホスト/ BPM /サービス

注:BPMは、IISで指定するアプリケーション名です。

メンバーシップ暗号化アルゴリズムは「ApplicatonName」を使用します。アプリケーションをセットアップするとき、アプリケーション名としてBPMを使用しました。開発サーバーでは、「名前」は「/」を返します。しかし、IISではその「BPM」です。

私の古いパスワードはすべて「/」アプリケーション名で生成されました。したがって、常にアプリケーション名を指定してください。Scott-Guのブログからこの記事を読んでください。

    public bool Login(string userName,string password)
    {
        var provider = Membership.Provider;
        string name = provider.ApplicationName;

        return Membership.ValidateUser(userName, password);
    }

//間違ったもの

      <membership>
        <providers>
            <clear/>
            <add name="AspNetSqlMembershipProvider"
                type="System...bla bla"
                connectionStringName="LocalSqlServer"
                enablePasswordRetrieval="false"
                enablePasswordReset="true"
                requiresQuestionAndAnswer="true"
                requiresUniqueEmail="false"
                passwordFormat="Hashed"
                maxInvalidPasswordAttempts="5"
                minRequiredPasswordLength="7"
                minRequiredNonalphanumericCharacters="1"
                passwordAttemptWindow="10"
                passwordStrengthRegularExpression=""
                applicationName="/" //Wrong
            />
         </providers>
    </membership>

//合っている物

          <membership>
                <providers>
                <clear/>
            <add name="AspNetSqlMembershipProvider"
                type="System.Web.Security.S.. bla bla"
                connectionStringName="LocalSqlServer"
                enablePasswordRetrieval="false"
                enablePasswordReset="true"
                requiresQuestionAndAnswer="true"
                requiresUniqueEmail="false"
                passwordFormat="Hashed"
                maxInvalidPasswordAttempts="5"
                minRequiredPasswordLength="7"
                minRequiredNonalphanumericCharacters="1"
                passwordAttemptWindow="10"
                passwordStrengthRegularExpression=""
                applicationName="MyAPPNAME" //Well :)
            />
         </providers>
    </membership>
于 2013-02-12T09:30:09.863 に答える