2012-02-15 114 views
1

我試圖使用WSO2的PHP Web服務框架來保護SOAP請求。WS 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頭?

回答

0

我不能很好地解決這個問題。我已經嘗試了@Peter在他的回覆中提示的提示。

我現在使用PHP/Java Bridge和本地Java類來發出安全請求。

1

您可能希望在WSSecurityToken構造函數中添加「ttl」=> 300,因爲您沒有將WSPolicy與數組一起使用,而是使用策略文件。所以,你的代碼應該是這樣的:

$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

If you want to have the UsernameToken, then the user, password and passwordType (optional) options must be set. For TimeStamp, the ttl option must be set.

一些額外的信息:

你passwordType是摘要,這個手段接收者需要同時使用wsse:Nonce和wsu:Created(時間戳)在標題中可用。如果你使用passwordType是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

注:我還沒有嘗試過(還)。我從來沒有使用WSO2的PHP Web服務框架。

+1

謝謝你,很好的迴應+1。但是,我仍然收到同樣的錯誤。我目前正在尋找諸如PHP/Java Bridge之類的替代方案,以消除對WS02框架的需求並使用本機Java來保護請求。再次感謝。 – Kit 2012-02-23 16:48:58