User von externer Anwendung authentifizieren

  • Hallo,


    ich möchte in einer externen php Anwendnung den Login mit den Forenaccounts ermöglichen.
    Die beste Lösung die ich bisher gefunden habe und dem nahe kommt ist hier:
    Externer Login mit WCF2-User Account


    Ich möchte jedoch über die externe Anwendung keinen Login im Forum durchführen sondern nur Username und Passwort überprüfen, alles weitere wie Sessionverwaltung soll die externe Anwendung unabhängig vom Forum machen.


    Bei der oben gefunden Lösung hab ich nur auch wie dort im Thread beschrieben das Problem, dass jede Loginüberprüfung den Gast zähler erhöht. Praktischer wäre wenn die Loginüberprüfung der externen Anwendung keine Seiteneffekte auf das Forum selbst hätte, bzw. zumindest keine sichtbaren wie den Gast Zähler.


    Die zweite Lösung im Thread nimmt nur die Passwort überprüfen Funktion, jedoch lese ich das so, dass ich den Passwort Hash zuvor selbst (z.B. direkt aus der Foren Datenbank lesen) organisieren muss. Ich bin mir sehr unsicher ob der direkte Zugriff auf die Forendatenbank von einer externen Anwendung eine saubere Lösung ist.


    Gibt es einen besseren Weg die Logindaten gegenüber dem Forum zu überprüfen?



    Zusätzlich wäre es eventuell noch praktisch die Gruppenzugehörigkeit im Forum abzufragen, damit die externe Anwendung je nach Forengruppenzugehörigkeit verschiedene Rechte vergeben kann. Gibt es da eine einfache Abfragemöglichkeit?



    Zuletzt noch ein alternativ Gedanke: Die externe Anwendung soll eine Webservice API sein, alternativ dazu die Schnittstelle zum Forum selbst zu programmieren, gibt es so etwas wie einen OAuth Server Plugin für das Forum, das man dazu verwenden könnte? (Zu OAuth hab ich beim Forum nur clientseitig was gefunden, dass externe OAuth Server für Forenaccounts genutzt werden können. Ich würde es genau anders herum brauchen, Forenaccounts per OAuth für externe Anwendungen nutzbar machen. Aber das war nur erstmal ein Gedanke, die erste Lösung mit direkter Account Abfrage beim Forum wird einfacher sein in die externe Anwendung zu integrieren)



    mfg

    Grüße,
    DMXControl-Projects e.V.

  • Hallo,


    eine fertige API gibt es dafür meines Wissens nicht.


    OAuth Server Plugin für das Forum: gibt es meines Wissens nicht.


    Anhand des von Dir verlinkten Themas und der datin befindlichen Codeschnipsel solltest Du aber eine externe Prüfung der Zugangscodes realisieren können.


    Die Usergruppen haben eine ID die Du in der DB auslesen kannst. Allerdings können die IDs variieren, wenn eigene Benutzergruppen hinzugefügt oder gelöscht wurden. Daher wäre das individuell anzupassen und ganz wichtig bei einer Änderung am Benutzergruppen dieses in der eigenen Applikation nachzuziehen. Von daher wäre es aiuf jeden Fall besser die Prüfung über eine WBB Frameworkabfrage laufen zu lassen. Da kann ich Dir aber aktuell nicht weiterhelfen, da ich das noch nicht gemacht habe.


    Grüße, CCFF

  • Danke für deine Antwort.


    Anhand des von Dir verlinkten Themas und der datin befindlichen Codeschnipsel solltest Du aber eine externe Prüfung der Zugangscodes realisieren können.

    Die Prüfung funktioniert mit dem Code ja, aber das Problem ist, dass bei jeder Abfrage ein Gast mehr im Forum aufgeführt wird, was nicht sein soll, bzw. ich bei der 2. Methode direkt auf die DB zugreifen muss und du hast ja selbst geschrieben, dass man besser Frameworkabfragen benutzt als direkt auf die Datenbank zuzugreifen.
    D.h. die Frage: Ist es möglich den Userlogin mit einer Framework abfrage zu überprüfen, ohne das ein Gast dafür im Forum aufgeführt wird?

    Grüße,
    DMXControl-Projects e.V.

  • Hallo,


    könntest Du die Abfrage auch via LDAP realisieren? Von Woltlab gibt es ein LDAP Plugin für WBB 4.


    Grüße, CCFF

  • Das war der ursprüngliche Plan. Da noch andere Systeme im Einsatz sind, war die Idee alle Forenaccounts ins LDAP umzuziehen und dann Forum, alles andere und auch die jetzt dazukommende Webservice API als Client auf LDAP zuzugreifen zu lassen.


    Leider funktioniert das Woltlab LDAP Plugin nicht so wie erhofft.
    Daher soll die Webservice API jetzt erstmal direkt auf das Forum Zugreifen um den Login zu überprüfen, irgendwann in Zukunft kann man dann eventuell nochmal die LDAP Umstellung angehen.


    Zur Forenanbindung direkt:
    Ich hab nochmal versucht das Problem mit dem hochzählenden Gast zähler anzugehen. Die Idee war ich lege einen User an für die Webservice API und verbinde dann die Session mit diesem User. Dann wird immer nur der eine User als Online angezeigt und nicht jedesmal ein neuer Gast gezählt.
    Das führt aber leider zu einem Sicherheitsproblem weil dann beim Besucher der Webapi Automatisch auch das Session Cookie für den Webservice API ForenAccount gesetzt wird, wenn ich diesem die Session zuweise.


    Und dass das Aufrufen des Forenframeworks direkt Header an den User schickt (insbesondere SetCookie), soll auch nicht sein. So müsste ich das Logintestscript welches das Forenframework läd im eignetlichen Webservice Script als Client aufrufen, damit kein output vom Framework zum Webservice User durchgereicht wird.
    Den content könnte man ja mittels ob_start abfangen, aber ja leider nicht die Header. Darum wird es nur so gehen, dass man ein 2. Script als Client auf dem Server aufruft und den Output davon auswertet.


    Das ist sieht aber erstmal nach mehr gebastel aus, als direkt auf die Forendantenbank zuzugreifen und dort die Userinfos auszulesen. Aber direkt auf die Datenbank zuzugreifen wäre halt auch mehr eine Bastellösung als eine saubere Lösung.

    Grüße,
    DMXControl-Projects e.V.

  • @LukvonStrom
    Nein gibt nichts neues. Habe noch keine Lösung gefunden, wie man User per Schnittstelle am Forum authentifizieren kann. Ich lese zurzeit jetzt einfach direkt aus der Forendatenbank, da ich nur Username/Password überprüft brauche und mir sonst eine UserID zum weiterarbeiten reicht. Der Code dazu sieht ungefähr so aus:
    Die Funktion WCFLoginCheck() bekommt Username und Password, das überprüft werden soll. Wenn Username Passwort richtig sind wird die User ID der Forendatenbank zurückgegeben, wenn nicht false.
    Ich weiß nicht ob der Code überall so läuft, da das WCF mit verschiedenen gespeicherten Passwortformaten umgehen kann, das Beispiel hier kann nur mit der einen Form umgehen die das WCF bei Installation standardmäßig verwendet. Außerdem wird so nur Überprüft ob der User so in der Forendatenbank existiert, nicht aber ob er z.B. über das Forum gebannt wurde, etc. Aktuell könnte sich auch ein gebannter User über diese Funktion anmelden. Edit: Test ob User gebannt ist oder Account nicht aktiviert ist hinzugefügt.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!