在SoapUI Pro中为REST Web服务创建WS安全头

时间:2017-02-27 10:22:51

标签: rest groovy soapui ws-security

我们正在开发一个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代码出错了?

感谢。

1 个答案:

答案 0 :(得分:0)

稍微改变我的答案,就像在原版中我将pasword摘要转换为字符串值一样,导致请求在某些时候没有验证,因为某些字节没有转换成正确的字符串值。

from itertools import combinations

b = [x*y for x,y in combinations(a,2)]