2017-02-27 3 views
0

SOAPUIでREST Webサービス用のWSセキュリティヘッダを作成します。 SoapUI Proでこれをテストしています。これらを生成してREST要求で使用するためのGroovyスクリプトを作成したいと考えています。我々は、RESTリクエストのヘッダパラメータとして渡されるWSセキュリティヘッダを持つREST Webサービスを開発しているプロ

これらのパラメータには、パスワードダイジェスト、エンコードされたnonce、作成されたdateTimeとpasswordダイジェストが含まれます。ノンス、ハッシュパスワード、作成日時のエンコードから作成されます。 SoapUI Proの発信WSセキュリティ設定。

私は(下記)ソープUI Proでグルーヴィーなテストスクリプトを作成しました。ただし、作成した値をヘッダーに渡すと、認証エラーが発生します。

私は、正しいパスワードをハッシュと同じ結果に私のPythonスクリプトを取得することができています。

このためGroovyのコードです。..

MessageDigest cript = MessageDigest.getInstance("SHA-1"); 
     cript.reset(); 
     cript.update(userPass.getBytes("UTF-8")); 
     hashedpw = new String(cript.digest()); 

これは正しくテキストハッシュ 'Password2451を!' "t5Sl•Vž3t;

次のステップは、ナンス作成したタイムスタンプとハッシュ化されたpaswordのパスワードダイジェストを作成することです。私は、このために、次のコードを持っている...

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

リクエストはどのようにサーバーに送信されましたか?と応答? – Rao

+0

こんにちは、元のクエリに追加しました。ありがとう。 – chucknor

答えて

0

私はpaswordは、などの特定のバイトが正しい文字列値に変換されませんでした時間のいくつかを検証していない要求を引き起こした文字列値にダイジェストに変換された元のように少し私の答えを変更します。

import java.security.MessageDigest; 

int a = 9 
nonce = "" 
for(i = 0; i < 10; i++) 
{ 
random = new Random() 
randomInteger= random.nextInt(a) 
nonce = nonce + randomInteger 
} 

Byte[] nonceBytes = nonce.getBytes() 

def XRMGDateTime = new Date().format("yyyy-MM-dd'T'HH:mm:ss",  TimeZone.getTimeZone('BTC')); 

Byte[] creationBytes = XRMGDateTime.getBytes() 

def password = testRunner.testCase.testSuite.getPropertyValue( "XRMGPassword") 

EncodedNonce = nonce.getBytes("UTF-8").encodeBase64() 

MessageDigest cript = MessageDigest.getInstance("SHA-1"); 
     cript.reset(); 
     cript.update(password.getBytes()); 
     hashedpw = cript.digest(); 

MessageDigest cript2 = MessageDigest.getInstance("SHA-1"); 
     cript2.update(nonce.getBytes());; 
     cript2.update(XRMGDateTime.getBytes()); 
     cript2.update(hashedpw); 

PasswordDigest = cript2.digest() 

EncodedPasswordDigest = PasswordDigest.encodeBase64(); 


def StringPasswordDigest = EncodedPasswordDigest.toString() 
def encodedNonceString = EncodedNonce.toString() 

testRunner.testCase.setPropertyValue("passwordDigest", StringPasswordDigest ) 
testRunner.testCase.setPropertyValue("XRMGDateTime", XRMGDateTime) 
testRunner.testCase.setPropertyValue("XRMGNonce", encodedNonceString) 
testRunner.testCase.setPropertyValue("Nonce", nonce) 
関連する問題