在Symfony2中使用WSSE auth,如何生成正确的头文件?

时间:2012-07-23 19:32:15

标签: php symfony

我正在关注Symfony 2的custom authentication provider食谱,但我不知道如何使用正确的所需WSSE标题生成登录表单或其他内容,因此我可以将其传递给我的自定义用户提供程序。

关于此的任何文档或教程?也许有些例子?文档缺乏这样的信息。

2 个答案:

答案 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,...)