我们正在开发一个REST Web服务,其WS安全头将作为REST请求中的头参数传递。 我在SoapUI Pro中测试它,并希望创建一个groovy脚本来生成这些,然后在REST请求中使用它们。
这些参数包括密码摘要,编码的nonce和创建的dateTime和密码摘要,它是通过编码nonce,散列密码和创建的日期和时间创建的,即代码应该与使用Outgoing生成这些代码的代码相同SoapUI Pro中的WS安全配置。
我在Soap UI Pro中创建了一个groovy测试脚本(如下)。但是,当我向标头提供创建的值时,我会收到授权错误。
我能够正确地散列密码并获得与我的python脚本相同的结果。
Groovy代码是..
MessageDigest cript = MessageDigest.getInstance("SHA-1");
cript.reset();
cript.update(userPass.getBytes("UTF-8"));
hashedpw = new String(cript.digest());
这正确地隐藏了文本'Password2451!'到í|è~μ“t5Sl•Vž³t; $。
下一步是创建nonce的密码摘要,创建时间戳和散列密码。我有以下代码...
MessageDigest cript2 = MessageDigest.getInstance("SHA-1");
cript2.reset();
cript2.update((nonce+created+hashedpw).getBytes("UTF-8"));
PasswordDigest = new String(cript2.digest());
PasswordDigest = PasswordDigest.getBytes("UTF-8").encodeBase64()
将'69999998992017-03-06T16:19:28Zí||~μ“t5Sl•Vž³t; $'转换为w6YA4oCUw6nDicucw6RqxZMIbcKze + KAmsOvBA4oYu + / vQ ==。
但正确的值应为01hCcFQRjDKMT6daqncqhN2Vd2Y =。
以下python代码正确实现了此转换...
hashedpassword = sha.new(password).digest()
digest = sha.new(nonce + CREATIONDATE + hashedpassword).digest()
谁能告诉我groovy代码出错了?
感谢。
答案 0 :(得分:0)
稍微改变我的答案,就像在原版中我将pasword摘要转换为字符串值一样,导致请求在某些时候没有验证,因为某些字节没有转换成正确的字符串值。
from itertools import combinations
b = [x*y for x,y in combinations(a,2)]