externer Zugriff auf WCF

    • WCF 1.1.x

      externer Zugriff auf WCF

      Hallo zusammen,

      ich bin gerade dabei eine clientseitige Anwendung zu schreiben, welche eine Seite (auf dem WCF aufbauend, als Plugin installiert) auslesen und weiter verarbeiten soll.
      Da ich diese Seite aber nur für Registrierte Benutzer zur Verfügung stellen will, müsste sich mein Client ja mit den Daten des Benutzers am WCF authentifizieren.
      Ist es, oder wie ist es möglich das zu realisieren?
      Meine Client-Anwendung ist in JAVA geschrieben.

      Vielen Dank bereits im Voraus!

      LG
      Dominik
      ich werfe niemandem etwas vor, höchstens hinterher :whistling:
      Also mir fallen zwei Möglichkeiten ein:
      1. Du rufst mit deinem Java-Programm den normalen Login des WCF auf, musst dann eben die Antwort ordentlich verarbeiten und dir den Cookie "merken" und entsprechend bei den Aufrufen immer mitschicken.
      2. Du baust dir wie bei Tapatalk (das Plugin kannst du z.B. bei TechNex runterladen und angucken) eine XML-RPC Schnittstelle, was vermutlich in der Verarbeitung einfacher ist als ständig irgendwelche HTTP-Header zu verarbeiten.
      Cacator cave malum! Aut si contempseris, habeas Jovem iratum!
      Ich habe leider gerade gesehen, dass Tim sein Plugin auf TechNex gelöscht hat. Das hat auch im Lite funktioniert. Das Plugin von Woltlab geht leider nur im WBB3.
      Vllt. schreibst du ihn einfach mal an, ob er dir das Plugin so schicken kann: technex.org/index.php?page=User&userID=2
      Ein bisschen Geduld wirst du aber haben müssen, nach meiner Erfahrung braucht er gerne mal ein oder zwei Tage zum antworten ^^ Aber vergessen hat er mich bisher nie ;)
      Cacator cave malum! Aut si contempseris, habeas Jovem iratum!
      ich habe grade die Antwort von Tim erhalten.
      Leider ist es aktuell nicht möglich an das Plugin zu kommen, weil er diesem gerade eine Grundüberholung verpasst.

      Hab mir jetzt selbst schon soweit ein paar Gedanken gemacht, wie man das Problem lösen könnte auf Basis einer mit PHP und Templates (um beim WCF-Standard zu bleiben) eine XML-Seite generieren kann. Das einzige, woran ich grade vom Verständnis noch etwas scheitere ist der Login...

      1. Wäre es ja grob fahrlässig das Passwort/die Benutzerdaten im Klartext zu übermitteln und danach zu prüfen. Wie bekomme ich eine Verschlüsselung zwischen PHP und Java hin, die nicht so leicht zu knacken ist?
      2. Muss der Benutzer "eingeloggt" sein, um die Berechtigungen seitens WCF prüfen zu können, also eine aktive Session bestehen (sehe ich das richtig?). Das bekomme ich ja aber nicht wirklich hin, wenn ich die Daten in einem Post-Request an das WCF sende, oder sehe ich das falsch? Hab ja (wenn ich auf dem richtigen Stand der Infos bin) danach keinen Session-Cookie in meiner Java-Büchse..


      Vielen Dank für Eure Hilfe!

      LG
      Dominik
      ich werfe niemandem etwas vor, höchstens hinterher :whistling:
      Zu 1 kann ich dir eine Antwort liefern, zu 2 nicht:
      Wenn du die Daten verschlüsseln willst solltest du auf ein SSL-Zertifikat gehen. Die Daten werden vor dem Absenden in Java dann verschlüsselt mit einem AES-Algorithmus(Meistens 256 Bit) und dann auf dem Server beim Empfang wieder entschlüsselt, davon selbst merkst du nichts und du musst dich um nichts kümmern. Ich denke dass wäre der einfachste Weg.
      Kommt auf die IP und Browserkennung an, aber mit hoher Wahrscheinlichkeit wird die jeweils andere Session gekillt. Wenn der Autologin an ist merkt der Benutzer da aber nicht viel von, weil er sich halt beim nächsten Seitenaufruf wieder ausloggt und den anderen wieder rauskickt.
      Cacator cave malum! Aut si contempseris, habeas Jovem iratum!
      Vielen Dank bereits für Eure Hilfe.
      Bin aktuell so weit, dass ich den Login über das automatisierte Skript hinbekomme und dann auf der Seite mit der Weiterleitung lande.
      Wenn ich jedoch danach einen (weiteren) POST-Request absetzen will, tut sich gar nichts. Jedenfalls bekomme ich als Antwort den HTML-Code der Forum-Startseite (als eingeloggt) und es ist der Thread nicht vorhanden.

      Die Cookies wcf_userID, wcf_password, wcf_cookieHash und wcf_boardLastActivity werden mitgeschickt:
      (Java-Quellcode. In der Variable 'cookies' befinden sich die Cookies als String mit ; getrennt.)

      Source Code

      1. con.setRequestProperty("Cookie", cookies);


      Hier die Daten:
      URL, an die der POST-Request geschickt wird:

      Source Code

      1. http://ltb-labs.square7.ch/wbb/index.php?boardID=2&form=ThreadAdd


      POST-Params:

      Source Code

      1. subject=Auto-Thread&text=Test-Inhalt&parseURL=1&enableSmilies=1&enableHtml=0&enableBBCodes=1&upload[]=&pollQuestion=&pollOptions=&endTimeDay=0&endTimeMonth=0&endTimeYear=&endTimeHour=0&endTimeMinutes=0&choiceCount=1&activeTab=&send=Absenden&idHash=49638d0f9382d0a7b9fbebc24fbbe13f6578eeb8


      Ist daran etwas falsch? Wie setzt sich der Parameter idHash zusammen? Ist der bei externem Zugriff überhaupt füllbar?

      Vielen Dank bereits im Voraus!
      ich werfe niemandem etwas vor, höchstens hinterher :whistling:
      okay, jetzt weiß ich, wo die ID herkommt und ebenfalls, dass ich es nicht schaffe extern diese Nummer zu generieren.
      Ist das denn für (in diesem Fall) das Posten eines Beitrages von außerhalb relevant?
      Oder scheitert es an dieser ID?
      ich werfe niemandem etwas vor, höchstens hinterher :whistling:
      ich hab mich jetzt dafür entschieden, dass ich bei jedem Aufruf der Seite die Login-Daten mitsende und somit checken kann.
      Gibt es eine Möglichkeit innerhalb des WCFs auf einer Seite die Login-Daten zu prüfen, bzw. an den richtigen Login weiterzuleiten und das Ergebnis (ich nehme an, die Methode, welche auch immer, liefert true/false zurück, oder wirft eine Exception, wenn die Daten nicht stimmen) und dann ggf. die weiteren Schritte einzuleiten?

      Vielen Dank für Eure Hilfe!

      #edit:
      ich hab durch Zufall ein Tutorial gefunden, in welchem genau dies abgehandelt wird: technex.org/index.php?page=TutorialsEntry&tutorialID=17
      ich werfe niemandem etwas vor, höchstens hinterher :whistling:

      Post was edited 1 time, last by “dominik4545” ().

      Du kannst userID, hashed password und sessionID an deine Schnittstelle übergeben und diese dazu veranlassen, diese Parameter als Cookie ($_COOKIE)zu setzen, bevor das WCF eingebunden wird. Damit "denkt" das WCF die Cookies würden vom Client mitgesendet werden und nutzt so den automatischen Login. Die Lösung ist natürlich nicht sauber, funktioniert allerdings (bereits getestet).
      Hallo Tim,
      vielen Dank für Deine Hilfe!
      Ich hätte es jetzt so gemacht, da ich eh eine SSL-Connection nutze, dass ich Username und Passwort hinschicke und die Methode "manualLogin" oder wie die heißt nutze. Danach die Session-ID mit in meine Ausgabe (XML) mit aufnehme und dann in den Link immer einbau. Danach nutze ich jedes Mal von der Session-Factory die Methode zur Session aufrufen anhand der ID und komm wieder rein (so jedenfalls meine Vorstellung, obs funktioniert, weiß ich noch nicht. Ansonsten greif ich wahrscheinlich auf Deine Möglichkeit zurück ;))
      ich werfe niemandem etwas vor, höchstens hinterher :whistling: