我的客户有一个旧的 TYPO3 6.2 安装,它已在 TYPO3 8.7 中重建。
在旧的 TYPO3 6.2 安装中,该fe_users
表拥有大约 15.000 个使用 MD5/crypt(3) 加密密码(以$1$开头)的用户。TYPO3 8.7 中客户端的重建fe_users
现在具有基于新 crypt 的密码(以$pbkdf2-sha256$ 开头)。到现在为止还挺好。
旧的 TYPO3 6.2fe_users
将被导入到新数据库中,但我在使用我们自己的 REST API(在 TYPO3 8.7 中构建)登录时遇到问题,其中使用的登录felogin
都是成功的。成功登录后felogin
,密码将转换为新加密,我可以使用 REST API 登录。-- 在使用 REST API 之前登录 15.000felogin
个用户绝对不是一种选择:)
REST API 使用\TYPO3\CMS\Saltedpasswords\
.
tl;dr:
如何在\TYPO3\CMS\Saltedpasswords\
不首先强制他们使用的情况下检查成功的加密felogin
?
REST API 示例代码
下面代码中的$byPasswordDecrypt是密码的解密值,使用RNCryptor加密发送
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('fe_users');
$queryRows = $queryBuilder
->select('uid', 'username', 'password')
->from('fe_users')
->where(
$queryBuilder->expr()->eq('username', $queryBuilder->createNamedParameter($ogUser))
)
->execute();
// Fetch the rows
$queryFetch = $user = $queryRows->fetch();
// Now, check the salted-password from the database against the given password
if (\TYPO3\CMS\Saltedpasswords\Utility\SaltedPasswordsUtility::isUsageEnabled('FE')) {
$objSalt = \TYPO3\CMS\Saltedpasswords\Salt\SaltFactory::getSaltingInstance($saltedPassword);
if (is_object($objSalt)) {
$success = $objSalt->checkPassword($byPasswordDecrypt, $queryFetch['password']);
}
}
如果有人能指出我成功进行密码哈希检查的正确方向,那将非常棒,我将非常感激!