Comment faire pour consommer un Service Web WCF qui utilise le nom d'utilisateur personnalisé de validation avec une page PHP?
Je vais avoir dur de temps une sécurité WCF Service Web à partir d'un code PHP du site. Mes connaissances en PHP sont limitées, j'ai trouvé plusieurs exemples sur le Web, mais n'a pas réussi faire leur travail encore.
J'ai une application Silverlight qui consomment aussi ce WebService et il fonctionne très bien. Mais lorsque j'exécute le PHP du site, j'obtiens cette erreur :
MessageSecurityException: processeur de Sécurité n'a pas pu trouver un en-tête de sécurité dans le message. Ce pourrait être parce que le message est une non garantie de la faute ou parce qu'il n'y est une liaison à l'inadéquation entre les parties communicantes. Cela peut se produire si le service est configuré pour la sécurité et le client n'est pas à l'aide de la sécurité.
J'ai aussi essayé de changer la customBinding à un basicHttpBinding. Quand je fais ça, le nom d'utilisateur Personnalisé validateur n'est pas appelé plus. Mais, à l'aide de basicHttpBinding et la suppression de validation des titres sur mon Service WCF "oeuvres" (Outre le fait qu'il est non sécurisé). Donc, le problème semble lié au message de sécurité.
Quelqu'un pourrait me donner un exemple de travail ou un tutoriel qui pourrait m'aider à faire de cette page PHP qui fonctionne?
Voici mon code PHP :
$options = array(
'soap_version' => SOAP_1_1,
'exceptions' => true,
'trace' => 1,
'cache_wsdl' => WSDL_CACHE_NONE,
'Username' => 'MyUserName',
'password' => 'MyPassword');
$client = new SoapClient('https://UrlToService/Service.svc?wsdl', $options);
try
{
$phpresponse = $client->Get();
print $phpresponse->GetResult->Version;
echo "</b><BR/><BR/>";
}
catch(Exception $e)
{
echo "<h2>Exception Error!</h2></b>";
echo $e->getMessage();
echo "<BR/><BR/>";
}
Configuration WCF
<behavior name="sslBehavior">
<serviceMetadata httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="MyNamespace.ServiceUserNameValidator, MyNamespace" />
</serviceCredentials>
<serviceSecurityAudit
auditLogLocation="Application"
serviceAuthorizationAuditLevel="Failure"
messageAuthenticationAuditLevel="Failure"
suppressAuditFailure="true" />
</behavior>
<customBinding>
<binding name="sslCustomBinding">
<security authenticationMode="UserNameOverTransport" includeTimestamp="true" allowInsecureTransport="true">
<localServiceSettings maxClockSkew="00:10:00" />
<localClientSettings maxClockSkew="00:10:00" />
<secureConversationBootstrap />
</security>
<textMessageEncoding messageVersion="Soap11" />
<httpsTransport />
</binding>
</customBinding>
<service behaviorConfiguration="sslBehavior" name="MyNamespace.Services.Service">
<endpoint address="" binding="customBinding"
bindingConfiguration="sslCustomBinding" contract="MyNamespace.ServiceContracts.IService" />
<host>
<baseAddresses>
<add baseAddress="https://UrlToService/Services/" />
</baseAddresses>
</host>
</service>
OriginalL'auteur PiercingDegree | 2011-07-11
Vous devez vous connecter pour publier un commentaire.
J'ai résolu le problème. J'ai eu étend le "SoapHeader" class en PHP pour la rendre conforme à la norme WS-Security.
Voici la solution :
PHP Header de la classe
PHP appel du Client
Espère qu'il vous aide à quelqu'un d'autre!
Merci à Chris : La connexion à WS-Security protégés Service Web avec PHP
Cela m'a aidé aussi! Excellente solution!
OriginalL'auteur PiercingDegree
SAVON est un peu drôle avec Authentification (ou peut être), j'ai utilisé la méthode de http://www.php.net/manual/en/soapclient.soapclient.php#101503 voir le commentaire de, faebu à faebu dot ch 21-Dec-2010 02:58 pour faire exactement ce à quelques reprises... il peut aider à
Essentiellement utilise CURL pour transmettre les informations d'authentification... il peut/ne peut pas travailler pour vous!
OriginalL'auteur Brian