1

WSO2 の Web Services Framework for PHP を使用して SOAP 要求を保護しようとしています。

ここに私の要求があります:

$reqPayloadString = <<<XML
       <echo>
       <echoRequest>TEST</echoRequest>
       </echo>
XML;


$reqMessage = new WSMessage($reqPayloadString,
                                array("to" => "http://localhost/service/echo",
                                      "action" => "echo"));

$sec_token = new WSSecurityToken(array("user" => "myusername",
                                       "password" => "mypassword",
                                       "passwordType" => "Digest"));  

$client = new WSClient(array("useWSA" => TRUE,
                             "policy" => new WSPolicy(file_get_contents("policy.xml")),
                             "securityToken" => $sec_token));

$resMessage = $client->request($reqMessage);

ただし、次のエラーが表示されます。

Missing wsse:Security header in request

wsse:Security上記のリクエストでヘッダーを設定するにはどうすればよいですか?

4

2 に答える 2

1

配列ではなくポリシーファイルでWSPolicyを使用しているため、WSSecurityTokenコンストラクターに "ttl"=>300を追加することをお勧めします。したがって、コードは次のようになります。

$sec_token = new WSSecurityToken(array("user" => "myusername", 
                                       "password" => "mypassword", 
                                       "passwordType" => "Digest", 
                                       "ttl" => 300 ));

少なくともこれは、マニュアルの8.1章に記載されている内容です。http ://wso2.org/project/wsf/php/2.1.0/docs/security_manual.html#1

UsernameTokenが必要な場合は、user、password、およびpasswordType(オプション)オプションを設定する必要があります。TimeStampの場合、ttlオプションを設定する必要があります。

いくつかの追加情報:

passwordTypeがDigestの場合、これは、受信者がヘッダーで使用できるようにwsse:Nonceとwsu:Created(タイムスタンプ)の両方が必要であることを意味します。passwordType is Textを使用する場合、その場合に言及されている両方の要素は必要ないため、ttlを指定する必要はありません。

PHP WSSecurityTokenクラスがwsse:Nonceの追加を処理するかどうかはわかりません。提供されたポリシーに基づいて処理されている可能性があります。

とにかく、ダイジェストの場合、ポリシーは次のようになります。

<sp:SupportingTokens xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:UsernameToken sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:HashPassword/>
</wsp:Policy>
</sp:UsernameToken>
</wsp:Policy>
</sp:SupportingTokens>

ソース: http: //blog.rampartfaq.com/2009/08/how-to-ask-for-hashed-password-in.html

注:私はまだ試していません。PHP用のWSO2のWebサービスフレームワークを使用したことはありません。

于 2012-02-21T15:49:00.717 に答える
0

残念ながらこれを解決できませんでした。@Peter の応答で提案されたヒントを試しました。

私は現在、PHP/Java Bridgeとネイティブ Java クラスを使用して安全なリクエストを作成しています。

于 2012-03-02T10:23:48.503 に答える