pax78 0 Geschrieben 23. Februar 2015 Melden Teilen Geschrieben 23. Februar 2015 Hallo an alle, ich hoffe ich habe das richtige Subforum gewählt. Sorry für die nichtssagende Überschrift, aber ich kann mein Problem nicht in wenigen Worten zusammenfassen. Vorerklärung zum Problem: Ich habe eine PHP-Anwendung, die täglich eine Anfrage an eine Api stellen soll. Diese Api verlangt ein Userlogin im Browserfrontend um einen gültigen Authtoken zu vergeben. Es gibt keine Möglichkeit, dieses Login per PHP-Request zu erledigen, deshalb kann ich keinen Cronjob für die tägliche Abfrage nutzen. Ich habe daher zu diesem Zweck eine Chrome-Extension gebaut, die sowohl das Timing der täglichen Abfrage als auch das Login übernimmt. Das funktioniert soweit auch tadellos, aber Problem: Aus Gründen der Resourcenknappheit habe ich als Windowsserver auf dem der Chromebrowser laufen kann nur eine virtuelle Maschine mit einem Win7. Dort laufen auch andere Anwendungen unter unterschiedlichen Nutzeraccounts, teilweise ohne dass ich Einfluss darauf habe. Diese sorgen regelmäßig dafür, dass mein Account, in dem der Browser läuft, abgemeldet wird und so der automatische tägliche Request nicht mehr stattfindet. Und nun zu meiner Frage: Gibt es eine Möglichkeit, Windows so zu konfigurieren, dass ein bestimmter Account quasi "unabmeldbar" ist? Also dass sich andere Accouns zwar einloggen können und arbeiten, aber ohne meinen Account damit abzumelden. Oder vielleicht den Chrome auf einer Ebene des Betriebssytems zu starten, die unabhängig von Nutzeraccounts ist? Oder irgendeine andere Möglichkeit, zu garantieren, dass der Chromebrowser permanent läuft? Bin über jeden Vorschlag dankbar. PS: Bitte keine Vorschläge ala: "Nimm einen anderen Server". Das werde ich mittelfristig tun, aber im Moment habe ich die Möglichkeit nicht. Vielen Dank! Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 23. Februar 2015 Melden Teilen Geschrieben 23. Februar 2015 Hallo und willkommen im Forum. Sorry, aber für mich hört sich das ein wenig wirr an. "Eine PHP-Anwendung greift auf eine API zu". Da Frage ich mich: Was hat der Browser mit diesem Zugriff zu tun? Wenn das ein HTTP(s)-Zugriff ist, kann man die Abfrage sich auch mit einer passenden PHP-Funktion ausführen, bei der man auch Auth-Daten übergeben kann. Der Browser macht auch nichts Anderes. Siehe u.a. http://php.net/manual/de/httprequest.send.php Zitieren Link zu diesem Kommentar
daabm 1.354 Geschrieben 23. Februar 2015 Melden Teilen Geschrieben 23. Februar 2015 ---und um die ursprüngliche Frage zu beantworten: Es gibt in Windows nichts, was einen Benutzer zwangsabmeldet, der interaktiv angemeldet ist. Greifst Du per RDP zu? Dann beschäftige Dich mal mit den Session Timeout Limits. Zitieren Link zu diesem Kommentar
pax78 0 Geschrieben 24. Februar 2015 Autor Melden Teilen Geschrieben 24. Februar 2015 (bearbeitet) Sorry, aber für mich hört sich das ein wenig wirr an. "Eine PHP-Anwendung greift auf eine API zu". Da Frage ich mich: Was hat der Browser mit diesem Zugriff zu tun? Wenn das ein HTTP(s)-Zugriff ist, kann man die Abfrage sich auch mit einer passenden PHP-Funktion ausführen, bei der man auch Auth-Daten übergeben kann. Ich weiß durchaus, wie man eine normale API benutzt und wie im Regelfall die Authentifizierung funktioniert. Bei dieser ist es jedoch so, dass man das Authtoken über ein Redirect im Browser bekommt und das nur dann, wenn in diesem Browser der Login Cookie gesetzt ist, den man legal eben nur durch einen echten Login auf der Website bekommt. Diese Api ist absichtlich so gebaut, dass eine automatisierte Abfrage erschwert werden soll. Deine Antwort bezog sich nicht auf meine Frage und war nicht hilfreich. ---und um die ursprüngliche Frage zu beantworten: Es gibt in Windows nichts, was einen Benutzer zwangsabmeldet, der interaktiv angemeldet ist. Greifst Du per RDP zu? Dann beschäftige Dich mal mit den Session Timeout Limits. Ja, ich greife mit Remote Desktop zu. Session Timeouts werd ich mir mal angucken, danke. Aber die dürften sich doch nur auf die RD-Verbindung beziehen, nicht auf den Login, oder? Ich bin gestern noch über die Möglichkeit gestolpert eine Anwendung als Windows Service zu installieren. Der Service soll ja unabhängig von Userlogins laufen und würde mein Problem vermutlich lösen. Jetzt stellt sich mir die Frage, kann das mit einem GUI-Programm überhaupt funktionieren oder geht das nur mit Konsolenanwendungen? Wenn der Server neu startet und kein User angemeldet ist, hätte der Chrome-Service dann überhaupt eine Umgebung in der er laufen kann? bearbeitet 24. Februar 2015 von pax78 Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 24. Februar 2015 Melden Teilen Geschrieben 24. Februar 2015 (bearbeitet) Ich bin gestern noch über die Möglichkeit gestolpert eine Anwendung als Windows Service zu installieren. Der Service soll ja unabhängig von Userlogins laufen und würde mein Problem vermutlich lösen. Jetzt stellt sich mir die Frage, kann das mit einem GUI-Programm überhaupt funktionieren oder geht das nur mit Konsolenanwendungen? Wenn der Server neu startet und kein User angemeldet ist, hätte der Chrome-Service dann überhaupt eine Umgebung in der er laufen kann? Bei einem Service musst Du die Meldungen natürlich ins Eventlog umleiten, denn wer soll bei einem Dienst Messageboxen anklicken? Es geht mit GUI und auch mit Konsolenanwendungen. Aber natürlich nur wenn in der GUI-Anwendung auch jede Meldung ins Eventlog geschrieben wird. Und nein, ein Dienst kann keine Kommunikation mit einem angemeldeten User führen. Zumindest nicht so, wie Du das gewohnt bist. Und Du mußt drauf achten, welchen Benutzeraccount Du beim ausführen des Dienstes vewendest, soll der User auch Zugriff auf außerhalb der Maschine haben? Ober der Chrome Service das kann weiß ich nicht. Entweder beim Hersteller nachfragen oder selbst ausprobieren. bearbeitet 24. Februar 2015 von Sunny61 Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 24. Februar 2015 Melden Teilen Geschrieben 24. Februar 2015 Ich weiß durchaus, wie man eine normale API benutzt und wie im Regelfall die Authentifizierung funktioniert. Bei dieser ist es jedoch so, dass man das Authtoken über ein Redirect im Browser bekommt und das nur dann, wenn in diesem Browser der Login Cookie gesetzt ist, den man legal eben nur durch einen echten Login auf der Website bekommt. Diese Api ist absichtlich so gebaut, dass eine automatisierte Abfrage erschwert werden soll. Deine Antwort bezog sich nicht auf meine Frage und war nicht hilfreich. Das tut mir Leid, dass meine Antwort nicht hilfreich war. Du kannst mir aber glauben, dass man diesen Zugriff programmatisch realisieren kann. Cookies und Authtoken sind nicht anderes als HTTP-Header, die man bei weiteren Requests halt wieder mit senden muss. Der Browser macht das auch so. Zitieren Link zu diesem Kommentar
pax78 0 Geschrieben 24. Februar 2015 Autor Melden Teilen Geschrieben 24. Februar 2015 Das tut mir Leid, dass meine Antwort nicht hilfreich war. Du kannst mir aber glauben, dass man diesen Zugriff programmatisch realisieren kann. Cookies und Authtoken sind nicht anderes als HTTP-Header, die man bei weiteren Requests halt wieder mit senden muss. Der Browser macht das auch so. Ok, ich versuchs nochmal ganz langsam. Um ein OAuthtoken zu bekommen, braucht man eine ID. Diese ID bekommt man nur durch ein Redirect. Das Redirect des Apiservers leitet auf eine vorher im Apiserver eingetragene Redirecturl weiter und übergibt die ID als GET Parameter... aber NUR wenn man auf dem Apiserver als Benutzer eingeloggt ist. Anderenfalls leitet das Redirect auf die Loginseite. Diese Loginseite ist kein stumpfes 2 Felder Formular von 1995, sondern ziemlich gut mit hashs gesichert. Es ist eben NICHT ohne weiteres möglich, einfach mit PHP den Request dieses Formulars zu simulieren. Mit viel Mühe könnte man das vermutlich knacken, aber das wäre mit Sicherheit dann nicht mehr legal. Bei einem Service musst Du die Meldungen natürlich ins Eventlog umleiten, denn wer soll bei einem Dienst Messageboxen anklicken? Es geht mit GUI und auch mit Konsolenanwendungen. Aber natürlich nur wenn in der GUI-Anwendung auch jede Meldung ins Eventlog geschrieben wird. Und nein, ein Dienst kann keine Kommunikation mit einem angemeldeten User führen. Zumindest nicht so, wie Du das gewohnt bist. Und Du mußt drauf achten, welchen Benutzeraccount Du beim ausführen des Dienstes vewendest, soll der User auch Zugriff auf außerhalb der Maschine haben? Ober der Chrome Service das kann weiß ich nicht. Entweder beim Hersteller nachfragen oder selbst ausprobieren. Das wäre in Ordnung. Der Browser muss normal laufen und Javascript ausführen können. Ich interessiere mich weder für seine Ausgaben noch sonst irgendwelche Meldungen. Würdest du auf den zweiten Abschnitt bitte noch etwas genauer eingehen? Dienste werden also auch unter einem account ausgeführt? Der muss dazu aber nicht eingeloggt sein? Zugriff von oder nach außerhalb ist nicht nötig. Der Browser braucht lediglich eine Internetverbindung. Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 24. Februar 2015 Melden Teilen Geschrieben 24. Februar 2015 Ohne da jetzt näher einzusteigen: PHP hat auch was für OAuth : 1.0 http://php.net/manual/de/book.oauth.php oder 2.0 https://developers.google.com/api-client-library/php/auth/web-app Z.B. benutzt meine FB zu Hause auf OAuth, um mit Google eine Telefonbuch zu syncen. Normalerweise kann man hier ein permanentes Token anfordern, das man nicht ständig erneuern muss. Im Falle meiner Fritzbox hat das Token sogar die Aktivierung der 2-Faktor Authentifizierung bei Google überlebt. Die Android-Dinger mussten aber einmalig neu angemeldet werden. Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 24. Februar 2015 Melden Teilen Geschrieben 24. Februar 2015 Dienste werden also auch unter einem account ausgeführt? Der muss dazu aber nicht eingeloggt sein? Zweimal ja. ;) Zitieren Link zu diesem Kommentar
pax78 0 Geschrieben 25. Februar 2015 Autor Melden Teilen Geschrieben 25. Februar 2015 @zahni Erst mal danke für Deine Geduld trotz meines Widerstandes. Du kannst dich gern mal daran versuchen und beweisen dass ich Unrecht habe. Die Api um die es geht ist die Instagram Api. https://instagram.com/developer/# Wenn es Dir gelingt dort Channelinformations, Posts, Followers, Likes usw. auf eine Art und Weise mit PHP abzufragen, die ohne Browserlogin auskommt und mit Cron gestartet werden kann, dann halt ich Dich hinterher für den Größten. Mein Problem wäre damit gelöst. Vielleicht sollte ich dann auch zum Gebäudereiniger umschulen ;-). @Sunny61 Danke. Ausführlich genug :-) Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 26. Februar 2015 Melden Teilen Geschrieben 26. Februar 2015 (bearbeitet) Getestet habe ich es nicht: https://github.com/cosenary/Instagram-PHP-API Ansonsten Googeln nach "instagram oauth php" bearbeitet 26. Februar 2015 von zahni Zitieren Link zu diesem Kommentar
pax78 0 Geschrieben 26. Februar 2015 Autor Melden Teilen Geschrieben 26. Februar 2015 Getestet habe ich es nicht: https://github.com/cosenary/Instagram-PHP-API Ansonsten Googeln nach "instagram oauth php" Ich schon :) Du kannst es schon beim Initialisieren des Wrappers sehen: https://github.com/cosenary/Instagram-PHP-API#initialize-the-class echo "<a href='{$instagram->getLoginUrl()}'>Login with Instagram</a>"; Zitieren Link zu diesem Kommentar
Daniel -MSFT- 129 Geschrieben 26. Februar 2015 Melden Teilen Geschrieben 26. Februar 2015 Sollte http://instaphp.com hier nicht auch weiterhelfen? Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.