0

デフォルトのasp.netテーブルとプロバイダーを使用して、ユーザーをJoomlaデータベースからカスタムデータベースに移行しようとしています。理論的には、web.config を変更することで、ハッシュ タイプをデフォルト (SHA) から MD5 に変更できますが、ログインすると、無効なパスワード (またはユーザー名ですが、それであるとは思えません) が報告されます。aspnet_Membership テーブルと Joomla_users テーブルを調べると、どちらもユーザーごとに同じパスワードとソルト値を持っていることがわかります (Joomla 1.7 は実際には password:salt として保存しますが、2 つのフィールドに分割するのは簡単です)。どちらも base64 形式のようで、ASP の既定のログイン コントロールを使用してユーザーを追加すると、新しいユーザーに対して同様のフィールドのペアが作成されます (ソルトはランダム化されていると思いますが、同じ既知のパスワードと比較することはできません)。 )。

これが私のweb.configからの抜粋です:

<system.web>
  <machineKey validation="MD5"/>
  ...
<membership hashAlgorithmType="MD5">
  <providers>
    <clear />
    <add name="AspNetSqlMembershipProvider"
         type="System.Web.Security.SqlMembershipProvider"
         connectionStringName="UserAuth"
         enablePasswordRetrieval="false"
         enablePasswordReset="true"
         requiresQuestionAndAnswer="false"
         requiresUniqueEmail="false"
         maxInvalidPasswordAttempts="5"
         minRequiredPasswordLength="6"
         minRequiredNonalphanumericCharacters="0"
         passwordAttemptWindow="10"
         passwordFormat="Hashed"
         applicationName="/" />
  </providers>
</membership>
</system.web>

私が確信していないことの 1 つは、それが md5、Md5、または MD5 のいずれであるかということです (グーグルでコード サンプルで後者の両方を見てきました)。ただし、代わりにナンセンスを書くことができ、アプリケーションはまぶたを打っているようには見えません。

他に方法がない限り、カスタム メンバーシップ プロバイダーを特に書きたいとは思いません。

以下は、Joomla のハッシュ化されたパスワードと、この関数のパラメーターとして提供されたパスワードを比較する PHP です。

                $user_id = mysql_result($result, 0, 'id');
                $db_password = mysql_result($result, 0, 'password');
                $joomla = &New JConfig;
                list($md5pass, $saltpass) = split(":", $db_password);
                $md5_password = md5($user_password.$saltpass);
                if (strcmp($md5_password, $suppliedpass) == 0)
                {
                    return $user_id;
                }

ASP バージョンが私の md5 要求を無視しているか、何らかの方法でそれを保存しているか、md5 を正しく使用するように指示していないか、または...? 最近 md5 が推奨されていないことは承知していますが、4000 人のユーザーにパスワードをリセットするように言いたくはありません。

4

1 に答える 1