我正在尝试配置我的symfony2应用程序以将sha512密码编码器与in_memory安全提供程序一起使用,但我无法让它工作。登录时我收到臭名昭着的“Bad credentials”错误。与此处的大多数问题不同,我不想从任何数据库中获取用户。我不想使用FOSUserBundle。我想要的只是用sha512哈希替换我的security.yml中的明文密码。
根据http://symfony.com/doc/current/book/security.html#encoding-the-user-s-password,这应该像设置编码器一样简单,并用哈希替换明文密码,这就是我试图做的事情:
security.yml:
security:
encoders:
Symfony\Component\Security\Core\User\User: sha512
providers:
in_memory:
memory:
users:
admin: { password: $6$randomsalt$mbd3sS15ibE.W7hkLqfQ0LNEQsUod7BOUD67g/oIb8uhqGfyAzaga3vgGaRJZn67VdHHfn.tnkKY9ffDVXw3C., roles: [ 'ROLE_ADMIN' ] }
密码为“admin”,盐为“randomsalt”,哈希由mkpasswd生成:
mkpasswd -m sha-512 admin randomsalt
为什么这不起作用? symfony2是否希望散列采用其他格式?
编辑:我也尝试过的事情:
crypt($password, "$6$".$salt)
encode_as_base64
true / false 结果相同:“凭证错误”。
答案 0 :(得分:4)
经过多次试验和错误,我能够工作的唯一配置是最简单的情况:
security:
encoders:
Symfony\Component\Security\Core\User\User:
algorithm: sha512
encode_as_base64: false
iterations: 1
providers:
in_memory:
memory:
users:
admin: { password: c7ad44cbad762a5da0a452f9e854fdc1e0e7a52a38015f23f3eab1d80b931dd472634dfac71cd34ebc35d16ab7fb8a90c81f975113d6c7538dc69dd8de9077ec, roles: [ 'ROLE_ADMIN' ] }
这是由echo -n admin | sha512sum
或任何各种在线哈希生成器获得的未加密密码的单个sha512迭代。我无法使用PHP的标准crypt()或password_hash()函数创建的任何东西。文档未指定格式。我的应用程序不以任何其他方式处理用户或密码,我更希望使用symfony的安全组件而无需编写自定义用户实体或密码编码器。对于看似非常基本的东西,这已经变成了大量的工作。
答案 1 :(得分:1)
我找到了一个不优雅但有效的解决方案,并允许任何次数的迭代,而不像接受的答案:
它使用以下类:Symfony \ Component \ Security \ Core \ Encoder \ MessageDigestPasswordEncoder
在任何Controller(或任何php文件)中添加以下代码:
use Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder;
...
$messageDigestPasswordEncoder= new MessageDigestPasswordEncoder;
var_dump($messageDigestPasswordEncoder); // you'll see the default options
var_dump($messageDigestPasswordEncoder->encodePassword('Hello', '')); // ouput the encoded password
在security.yml中,添加以下代码:
安全性:
encoders:
Symfony\Component\Security\Core\User\User: sha512
providers:
admin:
memory:
users:
# password: Hello
test: { password: CYvx/IlZCmwdywJkE8X6FTAixdgaL1oq0u8Ij3o+2LIAyDkWHynQ5UCdWe78YQt5j4oMIIu7YjYYR2b3H7zbvg==, roles: 'ROLE_ADMIN' }