Webservices - Username-Token-Profile - Wer hat Erfahrung?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Webservices - Username-Token-Profile - Wer hat Erfahrung?

    Hallo,

    ich wollte prinzipiell mal fragen, ob jemand von euch genauere Kenntnisse über die Authentifizierung von Webservices über das Username-Token-Profile 1.0 hat.

    Bräuchte etwas Hilfe hierzu, da mir trotz der Beschreibung die hier als PDF zu finden ist die Authentifizierung nicht gelingen will.

    Also wenn jemand Ahnung davon hat, bitte hier melden, dann werde ich weiter ausführen wo ich steckenbleib - soviel vorneweg - ich versuche nicht selbst Webservices zu programmieren/anzubieten, sondern versuche einen Client zu proggen.

    Gruss
    Quetschi

    EDIT:
    Ist jetzt noch nicht richtig BS - würd aber evtl. eins werden falls ich Ansprechpartner finde.
    Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
    Schön - etwas Geschichte kann ja nicht schaden.
    Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

  • #2
    Hab es mittlerweile hinbekommen

    Falls jemand mal Fragen zu 'Web Services Security - UsernameToken Profile 1.0' hat stehe ich gerne zur Verfügung!
    Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
    Schön - etwas Geschichte kann ja nicht schaden.
    Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

    Kommentar


    • #3
      Ein sehr alter Thread, ich weiß, doch ich hätte da einige Fragen.

      Ich versuche gerade mich mit einen UsernameToken zu authentifizieren, doch irgendwas läuft hier schief und ich weiß nicht was.

      Der SOAP-Header soll so aussehen:
      Code:
      <soapenv:Envelope 
              xmlns:sch=".../schemas" 
              xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
          <soapenv:Header>
              <wsse:Security soapenv:mustUnderstand="1" 
                  xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
                  <wsse:UsernameToken wsu:Id="UsernameToken-30298281" 
                          xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
                      <wsse:Username>...</wsse:Username>
                      <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">
                          ...
                      </wsse:Password>
                      <wsse:Nonce>...</wsse:Nonce>
                      <wsu:Created>...</wsu:Created>
                  </wsse:UsernameToken>
              </wsse:Security>
          </soapenv:Header>
          ...
      Und meiner sieht so aus:
      Code:
      <SOAP-ENV:Envelope
          xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
          xmlns:ns1=".../schemas"
          xmlns:ns2="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
      
          <SOAP-ENV:Header>
              <ns2:Security SOAP-ENV:mustUnderstand="1">
                  <ns2:UsernameToken>
                      <ns2:Username>...</ns2:Username>
                      <ns2:Password xsi:type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">...</ns2:Password>
                  </ns2:UsernameToken>
              </ns2:Security>
          </SOAP-ENV:Header>
          ...
      Der PHP-Code dazu:
      Code:
                      $wsdlUrl = 'http://....wsdl';
                      $namespace = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd';
                      
                      $token = new stdClass; 
                      $token->Username = new SOAPVar($username, XSD_STRING, null, null, null, $namespace);
                      $token->Password = new SOAPVar($password, XSD_STRING, 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText', null, null, $namespace);
                      
                      $security = new stdClass;
                      $security->UsernameToken = new SoapVar($token, SOAP_ENC_OBJECT, null, null, null, $namespace);
                      
                      $headers = new SOAPHeader($namespace, 'Security', $security, true);
                      
                      //$client = new SoapClient($wsdlUrl, array('Username' => $username, 'Password' => $password));
                      $client = new SoapClient($wsdlUrl);
                      $client->__setSOAPHeaders($headers);
      Was mache ich falsch, bzw. was soll ich anders machen, damit es geht?
      Kenne mich mit WebServices nicht so sehr aus und das ist das erste mal, dass ich damit arbeite.
      Zuletzt geändert von sarah19; 08.12.2009, 14:26.

      Kommentar


      • #4
        Hallo,

        ich hab zwar auch nicht viel Ahnung von SOAP, aber hauptsächlich fehlt bei dir doch nonce und created, oder? Die könntest du doch noch erzeugen und mit an $token übergeben (genau wie du es mit Username und Password machst).

        Evtl. hilft auch das hier: PHP: SoapServer::SoapServer - Manual

        Gruß,

        Amica
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Ich weiß aber nicht so genau - bzw. gar nicht - was ich da eintragen soll.
          Habe es eben so gemacht, aber funktionieren tut es nicht. Bin echt überfragt.

          Code:
          $wsdlUrl = '....wsdl';
          $namespace = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd';
          $wsu = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd';
          
          $time = ceil(time());
          $nonce = md5(date('Y-m-d H:i:s:u', $time) . ':' . $_SERVER['REMOTE_ADDR'] . ':' . 'privatekey'); // <---- ???
          $created = date("Y-m-d\TH:i:s", mktime (date("H") + 5, date("i"), date("s"), date("m"), date("d"), date("Y"))) . "Z";
          
          $token = new stdClass; 
          $token->Username = new SOAPVar($username, XSD_STRING, null, null, null, $namespace);
          $token->Password = new SOAPVar($password, XSD_STRING,
                 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText',
                 null, null, $namespace);
          $token->Nonce = new SOAPVar($nonce, XSD_STRING, null, null, null, $namespace);
          $token->Created = new SOAPVar($created, XSD_STRING, null, null, null, $wsu);
          
          $security = new stdClass;
          $security->UsernameToken = new SoapVar($token, SOAP_ENC_OBJECT, null, null, null, $namespace);
          
          $headers = new SOAPHeader($namespace, 'Security', $security, true);
          
          //$this->setSoapClient(new SoapClient($wsdlUrl, array('Username' => $username, 'Password' => $password)));
          $this->setSoapClient(new SoapClient($wsdlUrl));
          $this->getSoapClient()->__setSOAPHeaders($headers);
          Zuletzt geändert von sarah19; 08.12.2009, 15:09.

          Kommentar


          • #6
            Hallo,

            du scheinst die Soap-Version 1.1 zu verwenden, die geforderten Header sehen aber nach Version 1.2 aus.
            Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
            Schön - etwas Geschichte kann ja nicht schaden.
            Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

            Kommentar


            • #7
              Wie ändere ich das?

              Kommentar


              • #8
                PHP: SoapClient::SoapClient - Manual

                Schau bei den "Expamples" - gleich der zweite Eintrag.
                Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                Schön - etwas Geschichte kann ja nicht schaden.
                Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                Kommentar


                • #9
                  Danke. Ist nun drin, doch es hat sich nichts geändert. Geht leider immer noch nicht.

                  Wie kann ich eigentlich den kompletten XML-Inhalt anzeigen lassen? Mache es bis jetzt über var_dump(), doch es schneidet mir inzwischen das meiste ab, weil es zu lang ist.

                  Kommentar


                  • #10
                    Puh - das ist so lange her und ich kenn das Soap-Zeugs kaum noch. Zudem hab ich damals aus Gründen die ich heut nicht mehr weiß mit den PHP-Board-Mitteln aufgegeben und den Request manuell performt.

                    Aber zeig nochmal was du im Moment an Code hast und was du die wie ausgegeben bekommst.
                    Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                    Schön - etwas Geschichte kann ja nicht schaden.
                    Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                    Kommentar


                    • #11
                      Sorry, wegen den langen Zeilen.

                      PHP-Code:
                      Code:
                      public function __construct($username, $password) {
                          try {
                              $wsdlUrl = '....wsdl';
                              $namespace = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd';
                              $wsu = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd';
                              
                              $time = ceil(time());
                              $nonce = md5(date('Y-m-d H:i:s:u', $time) . ':' . $_SERVER['REMOTE_ADDR'] . ':' . 'privatekey'); // <--- ???
                              $created = date("Y-m-d\TH:i:s", mktime (date("H") + 5, date("i"), date("s"), date("m"), date("d"), date("Y"))) . "Z";
                             
                              $token = new stdClass; 
                              $token->Username = new SOAPVar($username, XSD_STRING, null, null, null, $namespace);
                              $token->Password = new SOAPVar($password, XSD_STRING,
                                      'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText',
                                      null, null, $namespace);
                              $token->Nonce = new SOAPVar($nonce, XSD_STRING, null, null, null, $namespace);
                              $token->Created = new SOAPVar($created, XSD_STRING, null, null, null, $wsu);
                              
                              $security = new stdClass;
                              $security->UsernameToken = new SoapVar($token, SOAP_ENC_OBJECT, null, null, null, $namespace);
                              
                              $headers = new SOAPHeader($namespace, 'Security', $security, true);
                                      
                              //$client = new SoapClient($wsdlUrl, array('Username' => $username, 'Password' => $password)));
                              $client = new SoapClient($wsdlUrl, array('soap_version' => SOAP_1_2));
                              $client->__setSOAPHeaders($headers);
                              
                              var_dump($client);
                              var_dump($client->__getFunctions());
                              var_dump($client->__soapCall('...', array('...')));
                              
                          } catch (SoapFault $exception) {
                              var_dump($exception->getTrace());
                          }
                      }
                      Ausgabe:
                      Code:
                      object(SoapClient)[10]
                        public '_soap_version' => int 2
                        public 'sdl' => resource(3, Unknown)
                        public '__default_headers' => 
                          array
                            0 => 
                              object(SoapHeader)[9]
                                public 'namespace' =>
                                      string 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' (length=81)
                                public 'name' => string 'Security' (length=8)
                                public 'data' => 
                                  object(stdClass)[7]
                                    ...
                                public 'mustUnderstand' => boolean true
                      
                      array
                        0 => string '...' (length=50)
                        1 => string '...' (length=50)
                        2 => string '...' (length=50)
                        3 => string '...' (length=50)
                      
                      array
                        0 => 
                          array
                            'function' => string '__doRequest' (length=11)
                            'class' => string 'SoapClient' (length=10)
                            'type' => string '->' (length=2)
                            'args' => 
                              array
                                0 => string '<?xml version="1.0" encoding="UTF-8"?>
                      <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1=".../schemas"
                      xmlns:ns2="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
                      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                      xmlns:ns3="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
                      <env:Header><ns2:Security env:mustUnderstand="true"><ns2:UsernameToken>
                      <ns2:Username>...</ns2:Username><ns2:Passw'... (length=858)
                                1 => string 'http://...:0000/' (length=100)
                                2 => string '' (length=0)
                                3 => int 2
                                4 => int 0
                        1 => 
                          array
                            'file' => string '/home/.../soap.php' (length=100)
                            'line' => int 51
                            'function' => string '__soapCall' (length=10)
                            'class' => string 'SoapClient' (length=10)
                            'type' => string '->' (length=2)
                            'args' => 
                              array
                                0 => string '...' (length=11)
                                1 => 
                                  array
                                    ...
                        2 => 
                          array
                            'file' => string '/home/.../index.php' (length=100)
                            'line' => int 4
                            'function' => string '__construct' (length=11)
                            'class' => string 'soap' (length=4)
                            'type' => string '->' (length=2)
                            'args' => 
                              array
                                0 => &string '...' (length=100)
                                1 => &string '...' (length=100)
                      Zuletzt geändert von sarah19; 08.12.2009, 16:02.

                      Kommentar


                      • #12
                        Zitat von sarah19 Beitrag anzeigen
                        Sorry, wegen den langen Zeilen.
                        Dagegen könntest du mit dem Ändern-Button was unternehmen
                        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                        Super, danke!
                        [/COLOR]

                        Kommentar


                        • #13
                          Wie bist du denn an den Header im Eingangspost gekommen? Müsste __getLastRequest bzw. __getLastRequestHeaders gewesen sein.

                          Und brich bitte wenigstens diese Mörderzeile um.
                          Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                          Schön - etwas Geschichte kann ja nicht schaden.
                          Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                          Kommentar


                          • #14
                            Zitat von AmicaNoctis Beitrag anzeigen
                            Dagegen könntest du mit dem Ändern-Button was unternehmen
                            Wozu hat man denn einen Widescreen? Done.

                            Kommentar


                            • #15
                              Zitat von sarah19 Beitrag anzeigen
                              Wozu hat man denn einen Widescreen?
                              Du vielleicht

                              Zitat von sarah19 Beitrag anzeigen
                              Done.
                              Danke, besser, aber immer noch nicht regelkonform (193 > 100)
                              Zuletzt geändert von AmicaNoctis; 08.12.2009, 16:13.
                              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                              Super, danke!
                              [/COLOR]

                              Kommentar

                              Lädt...
                              X