我正在关注Symfony 2的custom authentication provider食谱,但我不知道如何使用正确的所需WSSE标题生成登录表单或其他内容,因此我可以将其传递给我的自定义用户提供程序。
关于此的任何文档或教程?也许有些例子?文档缺乏这样的信息。
答案 0 :(得分:3)
实际上,您不应该使用登录表单向服务器发送WSSE标头:登录表单将发送HTTP POST请求(使用POST参数),但不会像WSSE连接所期望的那样修改HTTP标头。
我正在使用WSSE和javascript和/或某些客户端(如Android应用程序)。
为了测试,我在命令行中使用curl,在请求中添加wsse-headers。
以下another question/answer可以帮助您操作卷曲,helpful javascript wsse generator。
答案 1 :(得分:1)
Hee是使用Symfony
的PHP客户端WSSE生成器的示例function hashPassword($password, $salt)
{
$salted = $password . '{' . $salt . '}';
$digest = hash('sha512', $salted, true);
//5000 iterations: the sysmfony default iterations
for ($i = 1; $i < 5000; $i++) {
$digest = hash('sha512', $digest . $salted, true);
}
return base64_encode($digest);
}
function wsse_header($username, $hashedPassword)
{
$nonce = hash_hmac('sha512', uniqid(null, true), uniqid(), true);
$created = new DateTime('now', new DateTimezone('UTC'));
$created = $created->format(DateTime::ISO8601);
$digest = hash('sha512', $nonce . $created . $hashedPassword, true);
return sprintf(
'X-WSSE: UsernameToken Username="%s", PasswordDigest="%s", Nonce="%s", Created="%s"',
$username, base64_encode($digest), base64_encode($nonce), $created
);
}
echo wsse_header('someUsername',
hashPassword('somePassword', 'someSalt'));
您可以将此示例改编为其他客户端(Android,Ios,Javascript,...)