SoapUI发送SOAP请求报不符合配置策略、安全头缺失问题求助
SoapUI WS-Security鉴权报错排查方案
针对「No Security Header found」初始报错的修正
- 不要手动在请求XML里手写Security节点,手动拼接的节点很容易缺
env:mustUnderstand="true"属性、命名空间不匹配,直接导致服务端XWSS组件识别不到安全头。 - 打开项目层级的
WS-Security Configuration面板,切到Outgoing WS-Security Config标签新建出站安全配置,先取消勾选Add Default WSU Timestamp选项——老版本Sun XWSS组件对时间戳格式、时间窗口校验极严,排障阶段先去掉减少干扰项。 - 回到对应接口请求的Auth标签,下拉选择刚才新建的WS-Security配置,不要选其他HTTP类鉴权方式。
针对「Receiver Requirement for Digested Password has not been met」报错的修正
这个报错是UsernameToken的密码类型、字段配置不匹配的典型表现,按以下顺序调整:
- 编辑你新建的出站WS-Security配置,添加一个
UsernameToken条目,填入对应的账号密码:Password Type先选PasswordDigest,不要选Auto自动识别- 必须勾选
Add Nonce、Add Created两个选项:PasswordDigest的计算逻辑是Base64(SHA1(Nonce + Created + 明文密码)),缺任意一个字段生成的摘要都会被服务端判定为无效 - 保持Nonce、Created节点的默认
wsu命名空间前缀,不要自定义前缀,XWSS解析器对非标准前缀的字段会直接跳过校验
- 如果按上面Digest模式配置完还是报相同错误,直接把密码类型切换为
PasswordText测试:不少厂商封装XWSS策略时会把校验逻辑写反,提示要求摘要密码实际仅接收明文密码传输。
无官方文档场景的兜底排查
- 配置完不要直接发请求,先点请求面板下方的
Raw标签查看原始出站报文,确认<env:Header>节点下存在完整的<wsse:Security>子节点,且节点内字段和你配置的一致,没有被SoapUI自动过滤。 - 确认请求使用的SOAP版本匹配:你收到的报错响应是SOAP 1.2格式,对应WS-Security扩展的命名空间必须用OASIS 1.0标准的
http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd,不要误用SOAP 1.1的旧命名空间。 - 如果有条件,抓取同环境下其他已对接系统、前端页面正常调用该接口的报文,对照Security头的结构核对是否有额外要求的字段、Token属性,部分定制化的XWSS策略会要求在Security头里带固定的TokenType标识才会进入鉴权流程。
注意:如果后续开启Timestamp时间戳校验,要保证运行SoapUI的机器时间和服务端时间差不超过5分钟,XWSS默认的时间校验窗口就是5分钟,时间差过大也会触发鉴权失败。
内容的提问来源于stack exchange,提问作者pee2pee
相关产品推荐
相关产品推荐

