首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TYPO3登录失败\Saltedpasswords与felogin正确

TYPO3登录失败\Saltedpasswords与felogin正确
EN

Stack Overflow用户
提问于 2017-10-24 09:06:01
回答 1查看 676关注 0票数 0

我的客户端有一个旧的TYPO3 6.2安装,该安装已经在TYPO3 8.7中重建。

在旧的TYPO3 6.2安装中,fe_users表拥有大约15.000名使用MD5/crypt(3)加密密码(从$1美元开始)的用户。在fe_users 8.7中为客户端重建的密码现在基于新的密码(从$pbkdf2-sha256$开始)。到现在为止还好。

旧的TYPO3 6.2 fe_users将导入到新数据库中,但我在使用自己的REST (构建在TYPO3 8.7中)登录时遇到问题,使用felogin的登录都是成功的。在felogin成功登录后,密码被转换为它们的新加密,我能够使用REST登录。-在使用REST之前,felogin登录15.000用户绝对不是一种选择:)

REST使用\TYPO3\CMS\Saltedpasswords\进行比较。

tl;dr:如何在不强迫他们使用felogin的情况下检查\TYPO3\CMS\Saltedpasswords\的成功加密?

REST 的示例代码

下面代码中的$byPasswordDecrypt是密码的解密值,该值是使用RNCryptor加密发送的。

代码语言:javascript
复制
$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']);
        }
    }

如果有人能指出正确的方向,成功的密码-散列检查,这将是绝对伟大的,我会非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-26 10:42:49

我自己解决了这个问题,并把我自己的问题写了出来,希望能在这个问题上帮助别人。

TYPO3 6.2 (可能更低)正在使用MD5-散列对密码进行散列,从$1$开始。如果所有设置都正确,TYPO3 8.7将使用$pbkdf2-sha256$之类的方法对密码进行散列。

要检查旧密码,您应该创建一个TYPO3\CMS\Saltedpasswords\Salt\Md5Salt实例。在通过这个实例使用checkPassword进行了成功的检查之后,我建议您使用给定的密码更新数据库表,并使用\TYPO3\CMS\Saltedpasswords\Salt\SaltFactory对其进行加密。

用于检查旧的MD5加密密码的示例:

代码语言:javascript
复制
$md5PasswordProcessor = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Saltedpasswords\\Salt\\Md5Salt');

$sampleLoginData = array(
    'uname' => $usernameSample
    'uident' => $unencryptedPassword,
    'status' => 'login'
);

$frontEndUserAuth = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Frontend\\Authentication\\FrontendUserAuthentication');
$frontEndUserAuth->checkPid = false;

$info = $frontEndUserAuth->getAuthInfoArray();
$info['db_user']['username_column'] = 'email';

$user_db = $frontEndUserAuth->fetchUserRecord($info['db_user'], $sampleLoginData['uname']);

$passwordByMd5 = $md5PasswordProcessor->checkPassword($byPasswordDecrypt, $user_db['password']);

if($passwordByMd5 === true) {
    // Check is correct, update your database here by, for example:
    $objSalt = \TYPO3\CMS\Saltedpasswords\Salt\SaltFactory::getSaltingInstance(null);
    $saltedPassword = $objSalt->getHashedPassword($unencryptedPassword);

    // And your queryBuilder should be written here
}

我希望我能帮助其他人解决这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46906363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档