Authentifizierung über Webservice

13. Februar 2013 16:24

Hallo,

ich möchte mit PHP via SOAP mittels Webservice (über Adapter HTTP) mit AX2012 kommunizeren.
Das Einrichten des Webservices und dessen Bereitstellung über den IIS klappt auch soweit.
Die dadurch bereitstehende WSDL-Datei, ermöglicht mir die Verbindung über PHP mittels SoapClient() zum Webservice.
Hier erstmal der PHP-Code:
Code:
<?php
    $arrOptions = array(
        'soap_version' => SOAP_1_2,
        'exceptions' => true,
        'trace' => 1,
        'cache_wsdl' => WSDL_CACHE_NONE
    );
   
    $strWSDl = 'http://ax2012-a.contoso.com:85/MicrosoftDynamicsAXAif60/SycAXCustomerServiceGroupHTTP/xppservice.svc?wsdl';
    try {   
        $objClient = new SoapClient($strWSDl, $arrOptions);
        echo '<h2>Vorhandene Funktionen:</h2>';   
        var_dump($objClient->__getFunctions());   
        echo '<h2>Aufruf Methode (getCreditLimit):</h2>';
        try {
            var_dump($objClient->__soapCall("getCreditLimit", array('AccountNum' => 1101)));
        } catch (SoapFault $arrSOAPFault) {
           echo ('<p style="color:red;">SOAP Fault: <b>'.$arrSOAPFault->faultcode.' '.$arrSOAPFault->faultstring.'</b></p>');
        }       
    } catch (Exception $objError) {
        echo '<b>'.$objError->getMessage().'</b>';         
    }
?>


Über die Funktion __getFunctions() ( siehe var_dump($objClient->__getFunctions()); ) erhalte ich auch eine Übersicht über die verfügbaren Funktionen die ich über den Webservice freigegeben habe (in dem Fall die Funktion getCreditLimit() die als Parameter den "AcountNum" benötigt):
array(1) {
[0]=>
string(106) "AXCustomerServiceGetCreditLimitResponse getCreditLimit(AXCustomerServiceGetCreditLimitRequest $parameters)"
}


Soweit so gut.
Nun möchte ich aber die Funktion getCreditLimit() aufrufen und das Ergebnis zurückbekommen.
Code:
var_dump($objClient->__soapCall("getCreditLimit", array('AccountNum' => 1101)));


Nun erhalte ich aber folgenden Fehler:
HTTP Unauthorized
Wobei "HTTP" der Fehlercode und "Unauthorized" der Fehlertext ist.

Ganz unklar ist mir die Fehlermeldung nicht, denn sonst könnte ja jeder von außerhalb auf die Daten zugreifen.

Allerdings hab ich nun sehr lange gegoogelt und rumprobiert, ich habe aber allerdings keine Ahnung wie die Authentifizierung aussehen soll!?
Wo muss die stattfinden, mit welchen Benutzeraccount und welche Parameter muss per SOAP übergeben um die Authentifizierung durchzuführen.

Ich finde leider keine Infos über den HTTP Webservice in AX2012 und auch keine Beispiele. Das ist ja prinzipiell keine PHP-Problem, mit anderen Sprachen (Websprachen) funktioniert das ja auch so.

Kann mir da jemand helfen, bzw. sagen was, wie, wo gemacht werden muss?

Vielen Dank

Re: Authentifizierung über Webservice

19. Februar 2013 08:40

Ich denke mal der IIS muss entsprechend eingestellt werden. Wenn der nur Kerberos-Authentifizierung zulässt, wirst Du es mit php etwas schwer haben.
Ich denke mal Du brauchst Basic Authentification und dazu einen Guide für PHP, wie man diese Anmeldedaten vor dem WebService übermittelst.