4

我正在关注Symfony 2的自定义身份验证提供程序说明书,但我不知道如何生成登录表单或具有适当所需 WSSE 标头的内容,因此我可以将其传递给我的自定义用户提供程序。

有这方面的文档或教程吗?也许有一些例子?该文档缺少此类信息。

4

2 回答 2

3

实际上,您不应该使用登录表单将 WSSE 标头发送到您的服务器:登录表单将发送 HTTP POST 请求(带有 POST 参数),但不会像 WSSE 连接所期望的那样修改 HTTP 标头。

我正在将 WSSE 与 javascript 和/或某些客户端(如 Android 应用程序)一起使用。

为了测试,我在命令行中使用 curl,在请求中添加 wsse-headers。

这是另一个可以帮助您操作 curl 的问题/答案,以及一个有用的 javascript wsse 生成器

于 2012-12-11T19:27:26.603 回答
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...)

于 2015-04-28T15:27:54.167 回答