Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] SOAP et WSSE Security

Posted by billben on 05/08/2014 13:41

Bonjour,

Etant nouveau sur l'utilisation de jelix et plus encore avec SOAP.

J'aimerais demander votre aide sur l'authentification wsse avec jelix.

En fait, j'ai déjà essayé le fichier wsdl avec SOAPUI tout en configurant le WS-Security Configurations / Outgoing WS-Security Configurations.

Et quand je soumets ma requete, j'obtiens bien une réponse. PAS DE PROBLEME.

et dans le <header>, j'ai :

<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
   xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
	<wsse:UsernameToken wsu:Id="UsernameToken-4C122DE2EEA3AE32FC13995387522263">
		<wsse:Username>appli-app</wsse:Username>
		<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">boeign747</wsse:Password>
	</wsse:UsernameToken>
	</wsse:Security>

Le PROBLEME : Il se situe dans mon client php (en jelix bien sûr). je n'arrive pas à produire cet <header>.

J'ai niché le code ci-dessous sur net mais cela ne marche pas. J'ai toujours l'erreur : "No WS-Security header found ...."


class WSSoapClient extends SoapClient{

	private $username;
	private $password;
	/*Generates de WSSecurity header*/
	private function wssecurity_header(){

		$timestamp=gmdate('Y-m-d\TH:i:s\Z');//The timestamp. The computer must be on time or the server you are connecting may reject the password digest for security.
		$nonce=mt_rand(); //A random word. The use of rand() may repeat the word if the server is very loaded.
		//$passdigest=base64_encode(pack('H*',sha1(pack('H*',$nonce).pack('a*',$timestamp).pack('a*',$this->password))));//This is the right way to create the password digest. Using the password directly may work also, but it's not secure to transmit it without encryption. And anyway, at least with axis+wss4j, the nonce and timestamp are mandatory anyway.
		$passdigest=$this->password;

		$auth='
		<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
		<wsse:UsernameToken >
		    <wsse:Username>'.$this->username.'</wsse:Username>
		    <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">'.$passdigest.'</wsse:Password>
		</wsse:UsernameToken>
		</wsse:Security>
		';


		$authvalues=new SoapVar($auth,XSD_ANYXML); //XSD_ANYXML (or 147) is the code to add xml directly into a SoapVar. Using other codes such as SOAP_ENC, it's really difficult to set the correct namespace for the variables, so the axis server rejects the xml.
		$header=new SoapHeader("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "Security",$authvalues,true);

		return $header;
	}

	/*It's necessary to call it if you want to set a different user and password*/
	public function __setUsernameToken($username,$password){
		$this->username=$username;
		$this->password=$password;
	}


	/*Overwrites the original method adding the security header. As you can see, if you want to add more headers, the method needs to be modifyed*/
	public function __soapCall($function_name,$arguments,$options=null,$input_headers=null,$output_headers=null){
		$result = parent::__soapCall($function_name,$arguments,$options,$this->wssecurity_header());

		return $result;
	}

}

Je ne sais pas si le problème se situe au niveau de :

<wsse:UsernameToken wsu:Id="UsernameToken-4C122DE2EEA3AE32FC13995387522263">

Si vous savez, comment produire ce wsu:Id (le header tout entier si c'est possible).

NB : j'ai tourné en rond depuis 2 semaines sur ce problème et le boss commence déjà à poser la question.

De l'aide svp.

Merci bien.

  [Opened] SOAP et WSSE Security

Reply #1 Posted by laurentj on 05/09/2014 09:25

Bonjour,

Je pense qu'il faut que tu ailles poser cette question sur des forums PHP plus généraliste. C'est très spécifique ce que tu demandes, et ne sembles pas avoir de rapport avec Jelix au final.

Je ne suis pas sûr qu'il y ait des experts SOAP ici, et personnellement, même si j'en ai un peu fait, WS-Security m'est totalement inconnu.

Essaye d'activer les fonctions de log/debuggage de l'API soap de PHP pour voir le contenu envoyé par ton soap client

 
Page
  1. SOAP et WSSE Security