デフォルトの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 人のユーザーにパスワードをリセットするように言いたくはありません。