Ошибка заголовка безопасности WS SOAP - PullRequest
1 голос
/ 15 февраля 2012

Я пытаюсь защитить запросы SOAP, используя WSO2 Web Services Framework для PHP.

Вот мой запрос:

$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 в запросе выше?

Ответы [ 2 ]

1 голос
/ 21 февраля 2012

Возможно, вы захотите добавить «ttl» => 300 в конструктор WSSecurityToken, поскольку вы используете 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

Если вы хотите использовать UsernameToken, тогдадолжны быть установлены опции user, password и passwordType (необязательно).Для TimeStamp должна быть установлена ​​опция ttl.

Некоторая дополнительная информация:

Ваш passwordType - Дайджест, это означает, что получателю нужно, чтобы в заголовке были доступны и wsse: Nonce, и wsu: Created (timestamp).Если вы используете 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>

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

Примечание: я еще не пробовал (пока).Я никогда не использовал WSO2 Web Services Framework для PHP.

0 голосов
/ 02 марта 2012

Я не смог решить это, к сожалению.Я попробовал подсказки, предложенные @Peter в своем ответе.

Я сейчас использую PHP / Java Bridge и нативные классы Java для безопасного запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...