2012-12-04 4 views
1

Je souhaite créer un en-tête WSS pour l'authentification sur des services Web sécurisés.Créer un en-tête WS-Security à l'aide de SimpleXML?

je peux le faire en utilisant un vilain:

$auth = ' 
    <wsse:Security SOAP-ENV:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
     <wsu:Timestamp wsu:Id="Timestamp-28" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
      <wsu:Created>' . $timestamp . '</wsu:Created> 
      <wsu:Expires>' . $timestampExpires . '</wsu:Expires> 
     </wsu:Timestamp> 
     <wsse:UsernameToken wsu:Id="UsernameToken-27" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
      <wsse:Username>' . $user . '</wsse:Username> 
      <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">' . $passdigest . '</wsse:Password> 
      <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">' . $encodedNonce . '</wsse:Nonce> 
      <wsu:Created>' . $timestamp . '</wsu:Created> 
     </wsse:UsernameToken> 
    </wsse:Security>'; 

Je suis maintenant en train de le faire plus propre, en utilisant SimpleXML.

Mais si j'essaie de faire simple:

$xml = new SimpleXMLElement('<wsse:Security/>', 0, false, 'wsse'); 

Je reçois:

avertissement: SimpleXMLElement :: __ construct() [SimpleXMLElement .-- construction]: erreur d'espace de noms: Espace de noms préfixe wsse sur la sécurité n'est pas défini dans

Je pense que quelque chose me manque avec la façon de créer des xml avec espaces de noms, pouvez-vous me donner quelques indices?

Répondre

0

je trouve un moyen de résoudre mon problème:

$root = new SimpleXMLElement('<root/>'); 

$security = $root->addChild('wsse:Security', 'test', 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'); 

$root->registerXPathNamespace('wsse', 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'); 
$auth = $root->xpath('/root/wsse:Security'); 
echo htmlentities($auth[0]->asXML()); 

Affiche:

<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">test</wsse:Security> 

Et aussi, il y a une erreur dans mon XML, je mets un SOAP-ENV:mustUnderstand="1" mais je définis jamais SOAP-ENV espace de nommage.