You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP构建WSSE SOAP Header遇InvalidSecurity错误求助

解决PHP中WSSE SOAP Header的InvalidSecurity错误

你踩了WSSE头结构的常见坑——WSSE规范要求所有认证相关元素必须嵌套在Security头的UsernameToken子节点里,而不是拆成多个独立的SoapHeader对象。你之前的写法把UsernameToken、USERNAME、PASSWORD作为单独的Header项发送,服务端根本无法识别正确的WSSE认证结构,所以才会抛出InvalidSecurity错误。

正确的实现方式

首先明确WSSE的标准结构:一个Security容器Header,里面包含一个UsernameToken节点,Username和Password是这个节点的子元素(部分服务还要求Nonce和Created字段防止重放攻击)。

以下是完整代码示例:

1. 构建符合规范的UsernameToken结构

// 基础版:仅用户名密码(PasswordText类型,适合测试环境)
$usernameToken = [
    'Username' => $this->partner->email,
    'Password' => [
        '_' => $this->partner->password,
        'Type' => 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText'
    ]
];

// 生产环境推荐:加密密码(PasswordDigest类型,带Nonce和Created)
// $nonce = random_bytes(16);
// $created = date('c');
// $passwordDigest = base64_encode(sha1($nonce . $created . $this->partner->password, true));
// $usernameToken = [
//     'Username' => $this->partner->email,
//     'Password' => [
//         '_' => $passwordDigest,
//         'Type' => 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest'
//     ],
//     'Nonce' => base64_encode($nonce),
//     'Created' => $created
// ];

2. 创建单个WSSE SoapHeader

// WSSE标准命名空间,务必对照服务端WSDL/API文档确认是否一致
$wsseNamespace = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd';

$wsseHeader = new SoapHeader(
    $wsseNamespace,
    'Security', // 外层容器节点名
    ['UsernameToken' => $usernameToken], // 嵌套的认证结构
    true // 标记该Header为必填,服务端会强制校验
);

// 给SoapClient设置Header
$client->__setSoapHeaders($wsseHeader);

3. 发起SOAP请求

之后执行__soapCall即可正常发起认证请求。

关键注意事项

  • 命名空间必须匹配:不同服务可能使用略有差异的WSSE命名空间,一定要和服务端要求一致,这是高频错误点。
  • 密码类型对应:服务端可能要求PasswordText或PasswordDigest,必须严格匹配配置。
  • Nonce和Created的必要性:如果服务开启重放防护,必须生成随机Nonce和当前时间的Created字段,否则仍会触发安全错误。

内容的提问来源于stack exchange,提问作者Drazen Bebic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:02:05