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

如何在Karate中传递WSSE:Security的用户名、密码及PasswordType参数

Karate中传递WSSE:Security参数的实现方法

你当前使用的实现翻译如下:

  • 授权头(Authorization)= { 用户名: '', 密码: '' }

该实现不符合WSSE头的格式规范,可按以下步骤调整实现:

  • 第一步:确认PasswordType类型,常用类型有两种:明文密码PasswordText、摘要密码PasswordDigest
  • 第二步:构造WSSE必填基础参数,示例代码:
# 核心参数定义
def username = "实际业务用户名"
def password = "实际业务密码"
def nonce = karate.randomUUID() // 随机数用于防重放
def created = karate.format(new java.util.Date(), "yyyy-MM-dd'T'HH:mm:ss'Z'") // 生成UTC标准时间戳
def passwordType = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"
  • 第三步:如果使用PasswordDigest类型,需额外计算密码摘要:
import org.apache.commons.codec.binary.Base64
import org.apache.commons.codec.digest.DigestUtils
// 计算摘要值
def passwordDigest = Base64.encodeBase64String(DigestUtils.sha1(nonce + created + password))
def nonceBase64 = Base64.encodeBase64String(nonce.getBytes())
  • 第四步:拼接WSSE头内容并设置到请求:
# 拼接头内容示例(PasswordText版本)
def wsseContent = 'UsernameToken Username="' + username + '", Password="' + password + '", Nonce="' + nonceBase64 + '", Created="' + created + '", PasswordType="' + passwordType + '"'
# 设置到请求头,大部分接口要求Authorization头带WSSE前缀
header Authorization = 'WSSE ' + wsseContent
# 部分接口要求用独立X-WSSE头,可替换为:
# header X-WSSE = wsseContent

注意:如果调用的是SOAP协议接口,WSSE参数需要放到SOAP请求的<Header>节点内,不需要设置HTTP头,直接把对应UsernameToken的XML结构拼到请求体的Header部分即可。

内容的提问来源于stack exchange,提问作者Sumanth Gudipati

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:09:04