SAML-Message mit PHP-SOAP senden..

Paspirgilis

Weißer Powerranger
Hi,
Ich hoffe jemand weiß wie man das Realisieren könnte:
Wir versuchen eine SAML-Authentifizierung zu realisieren die nicht so ganz dem standard entspricht..
Diese geht nur über das SAML-Artifact, ohne die authentifizierung via certificates.
Ich hab alles soweit hinbekommen die url herauszufinden und das saml artifact habe ich auch.
Jetzt muss ich "nur" noch das SAML-Artifact zu der URL schicken.
Auch mit simplesaml.org habe ich mich auseinander gesetzt, aber aufgrund fehlender CODE-Beispiel krieg ich es nicht hin.
Wir versuchen es gerade mit diesem CODE:

PHP:
$x = new SoapClient(NULL, array('location' => "http://localhost.de/saml-test/index.php",
                'uri' => "http://meineurl.de/portal/saml/"));

$artifact = 'AAHLm8Q4wr0woKL/pSHZWdo/qZjhNUFV78jvCSKd3l93syU2xbFatQ3k';
$request = '<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"><Body><Request xmlns="urn:oasis:names:tc:SAML:1.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><AssertionArtifact>' . $artifact . '</AssertionArtifact></Request></Body></Envelope>';



#SimpleSAML_Utilities::debugMessage($request, 'out');


$action = 'http://www.oasis-open.org/committees/security';


$version = '1.0';


$destination = 'http://meineurl.de/portal/saml/';


/* Perform SOAP Request over HTTP */


echo '<pre>';
    var_dump($x);
    echo '</pre><br/><br/>';
$soapresponsexml = $x->__doRequest($request, $destination, $action, $version);
echo '<pre>';
    var_dump($x);
    echo '</pre><br/><br/>';

if ($soapresponsexml === NULL || $soapresponsexml === "") {


    print('Empty SOAP.');
} else {
}

echo '<pre>';
    var_dump($soapresponsexml);
    echo '</pre><br/><br/>';

Aber wir bekommen immer nur zurück, dass "irgendwas" nicht gefunden wurde.. Ich wurde aus der rückmeldung nicht mal schlau :/

Irgendwelche vorschläge?

MfG
Mark Paspirgilis
 
Das mit dem SimpleSaml kann ich nur zu gut nachvollziehen, mir ging's vor kurzem nicht anders.
Ich hab's dann letztendlich auch selbst in die Hand genommen.

Was ist denn die Rückmeldung? Evtl. kann ich dir da helfen
 
Ich hab das jetzt nur als var_dump return:

PHP:
object(SoapClient)#1 (8) {
  ["uri"]=>
  string(42) "http://meineurl.de/portal/saml/"
  ["location"]=>
  string(39) "http://localhost.de/saml-test/index.php"
  ["_soap_version"]=>
  int(1)
  ["httpsocket"]=>
  resource(2) of type (stream)
  ["_use_proxy"]=>
  int(0)
  ["httpurl"]=>
  resource(3) of type (Unknown)
  ["_cookies"]=>
  array(1) {
    ["NSC_WT_rb.bvup-qbsuofs.ofu"]=>
    array(3) {
      [0]=>
      string(44) "ffffffff09f71df545525d5f4f58455e445a4a423660"
      [1]=>
      string(1) "/"
      [2]=>
      string(22) "meineurl.de"
    }
  }
  ["__soap_fault"]=>
  object(SoapFault)#2 (9) {
    ["message":protected]=>
    string(9) "Not Found"
    ["string":"Exception":private]=>
    string(0) ""
    ["code":protected]=>
    int(0)
    ["file":protected]=>
    string(57) "/home/markpaspirgilis/webdevelopement/saml-test/index.php"
    ["line":protected]=>
    int(36)
    ["trace":"Exception":private]=>
    array(1) {
      [0]=>
      array(6) {
        ["file"]=>
        string(57) "/home/markpaspirgilis/webdevelopement/saml-test/index.php"
        ["line"]=>
        int(36)
        ["function"]=>
        string(11) "__doRequest"
        ["class"]=>
        string(10) "SoapClient"
        ["type"]=>
        string(2) "->"
        ["args"]=>
        array(4) {
          [0]=>
          string(444) "AAHLm8Q4wr0woKL/pSHZWdo/qZjhNUFV78jvCSKd3l93syU2xbFatQ3k"
          [1]=>
          string(42) "http://meineurl.de/portal/saml/"
          [2]=>
          string(45) "http://www.oasis-open.org/committees/security"
          [3]=>
          string(3) "1.0"
        }
      }
    }
    ["previous":"Exception":private]=>
    NULL
    ["faultstring"]=>
    string(9) "Not Found"
    ["faultcode"]=>
    string(4) "HTTP"
  }
}

Bei meineurl.de da hab ich natürlich die kundenurl "verwischt" :)
Ich bin mir sicher, dass ich an der stelle die richtige url habe.

MfG
Mark Paspirgilis
 
Funktioniert dein SOAPdenn? Kriegst du bspw. ne wsdl ausgeliefert?
Dort meckert er ja schon über eine fehlende Message(Korrektur: Die Message lautet 'Not found')
Kann auch sein, dass ich jetzt an der komplett falschen Stelle bohre, mehr fällt mir dazu aber im Moment auch nicht ein...

Ich kann dir leider nur für nusoap ein Beispiel gebe, da ich irgendwann für mich beschlossen habe, dass das für mich das richtige ist
PHP:
require_once 'nusoap/lib/nusoap.php';

    $soap = new soap_server;

    // Service einbinden bzw. WSDL-Generierung zulassen
    $soap->configureWSDL('AddService', 'http://domain.tld');

    // Namespace definieren
    $soap->wsdl->schemaTargetNamespace = 'http://soapinterop.org/xsd/';

    // Funktion func_name registrieren
    $soap->register(
            'func_name',
            array('xml' => 'xsd:string'),
            array('xmla' => 'xsd:string'),
            'http://soapinterop.org/'
    );


edit: Grad gesehen, dass es bei dir ja um 'nen SOAP-Client geht... muss ich mal bei mir nachstellen
edit2: Stimmt die URL zum SOAP-Server denn überhaupt?
 
Zuletzt bearbeitet:
Du initialisierst den SOAP-Client ja im non-WSDL-Modus, da du im Konstruktor keine URL zu 'ner WSDL mit übergibst.. War mein Fehler mit der WSDL.

Aber nochmal zu der Exception:
Ich habe deinen Code bei mir - so wie er hier steht - ausgeführt.
Ich kriege genau die selbe Fehlermeldung.
Nun fällt mir erstmal folgendes auf: Die URLs stimmen bei mir natürlich nicht. Kannst du die bei dir nochmal prüfen?
 
wir werden ein workaround bauen udn ein bestehendes java programm via exec() oder system() ansprechen..
Danke für jede Hilfestellung.
 
Zurück