2014-01-13 2 views
1

Я новичок в SOAP API.Soap API + настройка заголовка безопасности в ответе

Я реализовал часть, где мне нужно передать заголовок WS-Security в запросе и реализовать безопасность в Soap Server на основе параметров, которыми мы передаем заголовок.

Теперь мое требование - отправить тот же заголовок Soap в Response, который мы передаем.

Можно ли реализовать?

Если да, то направляйте меня в правильном направлении.

ответ

2

Я понял, как отправить заголовок безопасности в ответ.

Давайте рассмотрим пример. Я звоню NotifyTransportRequest от моего клиента мыла. При вызове клиента я прохожу ниже заголовка, используя указанный код.

//Setting Security Header - Start 
$authHeader = new stdClass(); 
$authHeader->UsernameToken->Username = "user"; 
$authHeader->UsernameToken->Password = "password"; 
$authHeader->Timestamp->Created = "2013-12-31T07:15:41.135Z"; 
$authHeader->Timestamp->Expires = "2013-12-31T07:16:41.135Z"; 
$Headers[] = new SoapHeader('http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-  wssecurity-secext-1.0.xsd', 'Security', $authHeader,TRUE); 
// Setting Security Header - End 

// Setting Security Header for Authentication - Start. 
$Client->__setSoapHeaders($Headers); 
// Setting Security Header for Authentication - End. 

этим кодом он проходит под заголовком безопасности в запросе «Мыло».

<s:Header> 
    <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
    <u:Timestamp u:Id="_0"> 
     <u:Created>2014-01-16T12:39:31.050Z</u:Created> 
     <u:Expires>2014-01-16T12:40:31.050Z</u:Expires> 
    </u:Timestamp> 
    <o:UsernameToken u:Id="uuid-6065f07d-c852-45c7-8df4-ef9b566b9536-1"> 
     <o:Username>user</o:Username> 
     <o:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</o:Password> 
     </o:UsernameToken> 
    </o:Security> 
</s:Header> 

Теперь, когда я возвращаюсь из заголовка Soap, мне нужно пройти ниже кода, прежде чем что-то возвращать.

$headerStart = strtotime(date('Y-m-d H:i:s')) - (1*60); 
    $headerEnd = strtotime(date('Y-m-d H:i:s')) + (1*60); 

    $authHeader = new stdClass(); 
    $authHeader->UsernameToken->Username = "user"; 
    $authHeader->UsernameToken->Password = "password"; 
    $authHeader->Timestamp->Created = gmdate('Y-m-d\TH:i:s.u\Z', $headerStart); 
    $authHeader->Timestamp->Expires = gmdate('Y-m-d\TH:i:s.u\Z', $headerEnd); 
    $Header = new SoapHeader('http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd', 'Security', $authHeader, false); 

    $GLOBALS['server']->addSoapHeader($Header); 

В ответ будет добавлен заголовок мыла.

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:ns2="https://67.231.18.69/~verttest/dispatch/soap/medivan.wsdl"> 
     <SOAP-ENV:Header> 
     <ns1:Security> 
      <UsernameToken> 
       <Username>user</Username> 
       <Password>password</Password> 
      </UsernameToken> 
      <Timestamp> 
       <Created>2014-01-16T12:40:28.000000Z</Created> 
       <Expires>2014-01-16T12:42:28.000000Z</Expires> 
      </Timestamp> 
     </ns1:Security> 
    </SOAP-ENV:Header> 
    <SOAP-ENV:Body> 
      . 
      . 
      . 
    </SOAP-ENV:Body> 
    </SOAP-ENV:Envelope> 
Смежные вопросы