Header and authentication

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I'm working on a SOAP webservice in WSDL-mode with authentication based on the header of the request. I have wrote a header method which verify the login/password, but this method is not called when the request is received by the server.

My request looks like this :
<env:Envelope>
   <env:Header>
       <ns1:AuthHeader>
           <login>a login</login>
           <password>a hash</password>
       </ns1:AuthHeader>
   </env:Header>
   <env:Body>
       <Request>
           [...] a request
       </Request>
   </env:Body>
</env:Envelope>

Here a part of the WSDL :
<xsd:schema elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema"; targetNamespace="urn:MyUri">
       <xsd:element name="AuthHeader">
           <xsd:complexType name="AuthHeaderType">
               <xsd:sequence>
<xsd:element name="login" type="xsd:string" minOccurs="1" maxOccurs="1"/> <xsd:element name="password" type="xsd:string" minOccurs="1" maxOccurs="1"/>
               </xsd:sequence>
           </xsd:complexType>
       </xsd:element>
      [...............]
   </xsd:shema>

   <message name="AuthHeader">
       <part name="AuthHeader" type="tns:AuthHeaderType"/>
   </message>
<portType name="MyPortType">
       <operation name="myMethod">
           <input message="tns:Request"/>
           <output message="tns:Response"/>
       </operation>
   </portType>
<binding name="MyBinding" type="tns:MyPortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
       <operation name="myMethod">
           <soap:operation soapAction="urn:Action" style="document"/>
           <input>
<soap:header use="literal" message="tns:AuthHeader" part="AuthHeader"/>
               <soap:body use="literal"/>
           </input>
           <output>
               <soap:body use="literal"/>
           </output>
       </operation>
   </binding>
<service name="MyService">
       <port name="MyPort" binding="tns:MyBinding">
           <soap:address location="MyLocation"/>
       </port>
   </service>


And finally here is the PHP code :

[CLIENT]
$client = new SoapClient($wsdl, $options);

# add a header
$header = new SoapHeader('urn:MyUri', 'AuthHeader', new SoapVar(array('login'=>$options['login'], 'password'=>$options['password']), SOAP_ENC_OBJECT));
$client->__setSoapHeaders(array($header));

$Return = $client->MyMethod($request);


[SERVER]
class MyClass {
   public function AuthHeader($input)  { // try to log }
}


Can someone explain me what I did wrong ?
I tried a lot of different solutions found on the net, but none actually worked.
It looks like the 'ns1' namespace make something wrong ... ??

Thanks in advance,

Regards,
--
Pierre-Alain Mignot
Développeur
CNRS - CLEO
--
Tél.: 04.88.57.69.42
http://cleo.cnrs.fr/
http://www.revues.org/
http://www.lodel.org/
Doc. : http://www.lodel.org/wiki



--
PHP Soap Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [PHP Users]     [Kernel Newbies]     [PHP Database]     [Yosemite]

  Powered by Linux