如何在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
相关产品推荐
相关产品推荐

