【问题标题】:Synchronise my java apps with table user of fosuserbundle将我的 java 应用程序与 fosuserbundle 的表用户同步
【发布时间】:2016-03-12 12:26:52
【问题描述】:

我正在尝试创建一个桌面应用程序 (java),它指向我网站的同一个数据库(使用 symfony 2 创建),但我遇到的问题是我无法在“密码”和“盐”列中插入使用fosuserBundle生成的同样的加密类型sha512,不知道fosuserBundle是如何生成“salt”值的。

我的编码器目前设置为:

security:
encoders:
    FOS\UserBundle\Model\UserInterface: sha512

【问题讨论】:

  • 盐是随机生成的。然后每个密码被saltedhashed。为了检查密码,您必须执行相同的步骤并检查数据库中的哈希值是否与提供的密码生成的哈希值相同。

标签: java symfony encryption fosuserbundle


【解决方案1】:

检查FOS\UserBundle\Model\User__construct方法:

public function __construct()
{
    $this->salt = base_convert(sha1(uniqid(mt_rand(), true)), 16, 36);
    $this->enabled = false;
    $this->locked = false;
    $this->expired = false;
    $this->roles = array();
    $this->credentialsExpired = false;
}

【讨论】:

  • 感谢保罗对我的网站的回答一切都很好,但尝试使用 java 插入这些字段我不知道如何进行
  • 什么意思 - I canot insert in the columns "password" and "salt" ?
  • 我的意思是当我尝试使用 java 添加用户时,我们必须使用 fosuserBundle 使用的相同散列算法定义这些列所有这些都允许我从我的桌面应用程序添加用户并使用相同的连接使用网站的身份
  • 我认为,如果您从 java 应用程序创建新用户,那么您可以根据需要设置任何盐 - 您只需要以与 Symfony 相同的方式对密码进行编码。然后你应该可以在这两个地方登录。
  • 不能修改现有用户salt并尝试匹配密码!它不会去工作。你需要精确你的问题!您问这个 salt ks 是如何生成的,或者用户密码是如何基于该 salt 编码的?对于记录用户,您需要在您的 java 应用程序中应用来自当前密码编码器(来自 Symfony)的逻辑。
【解决方案2】:

最后我找到了使表 fos_user 中的“盐”字段可以忽略不计的解决方案是让这个方法只返回密码

namespace Symfony\Component\Security\Core\Encoder;

    protected function mergePasswordAndSalt($password, $salt)
        {
            if (empty($salt)) {
                return $password;
            }

            if (false !== strrpos($salt, '{') || false !== strrpos($salt, '}')) {
                throw new \InvalidArgumentException('Cannot use { or } in salt.');
            }

            return $password;


        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    相关资源
    最近更新 更多