Laden...

Automatisch einloggen und eingeloggt bleiben an einer API (ImmoScout24) durch meine eigene UI?

Erstellt von hanowde vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.625 Views
H
hanowde Themenstarter:in
5 Beiträge seit 2017
vor 6 Jahren
Automatisch einloggen und eingeloggt bleiben an einer API (ImmoScout24) durch meine eigene UI?

Guten Tag, Alle

Ich bin gerade dabei eine Schnittstelle zu schreiben, mit der ich meinen Zugangsdaten an die Webseite wie (z.B. : https://sso.sandbox-immobilienscout24.de/sso/login?appName=restapi) senden und mit dem Button "Anmelden" bestätige. Das möchte ich gerne automatisiert machen.

Wie müsste ich es am Besten machen?

Bis Jetzt habe ich folgendes probiert, aber ohne Erfolg:


public static void GetResponseWeb(string requestUrl)
        {

            // Create a request using a URL that can receive a post. 
            //WebRequest request = WebRequest.Create("http://www.conquerclub.com/login.php");
            WebRequest request = WebRequest.Create(requestUrl);

            request.Credentials = new NetworkCredential("myuser", "mypw");

            // Set the Method property of the request to POST.
            request.Method = "POST";

            // Create POST data and convert it to a byte array.
            string postData = "This is a test that posts this string to a Web server.";
            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            // Set the ContentType property of the WebRequest.
            request.ContentType = "application/x-www-form-urlencoded";
            // Set the ContentLength property of the WebRequest.
            request.ContentLength = byteArray.Length;

            // Get the request stream.
            Stream dataStream = request.GetRequestStream();
            // Write the data to the request stream.
            dataStream.Write(byteArray, 0, byteArray.Length);
            // Close the Stream object.
            dataStream.Close();

            // Get the response.
            WebResponse response = request.GetResponse();
            // Display the status.
            Console.WriteLine(((HttpWebResponse)response).StatusDescription);
            // Get the stream containing content returned by the server.
            dataStream = response.GetResponseStream();
            // Open the stream using a StreamReader for easy access.
            StreamReader reader = new StreamReader(dataStream);
            // Read the content.
            string responseFromServer = reader.ReadToEnd();
            // Display the content.
            Console.WriteLine(responseFromServer);
            // Clean up the streams.
            reader.Close();
            dataStream.Close();
            response.Close();

        }


Vielen Dank!

MFG!

Carvin

16.842 Beiträge seit 2008
vor 6 Jahren

Die von Dir besagte Seite hat doch eine sehr ausführliche API Beschreibung.
https://api.immobilienscout24.de/useful/tutorials-sdks-plugins.html und zudem ein fertiges .NET SDK.
Wieso verwendest Du das nicht?

H
hanowde Themenstarter:in
5 Beiträge seit 2017
vor 6 Jahren

Danke für deine schnelle Antwort!

Genau die API verwende ich gerade...aber es scheint dass die Seite damit nicht direkt authentifiziert werden lässt, sondern muss man immer auf der Seite manuell einloggen..

Ich weiß nicht ob du die API schon mal genutzt hast, ich komme da zu dem Generieren von Verifikation-Code nicht klar...von der API ist Auslesen dieses Codes nicht vorhanden.

Deswegen suche ich gerade eine alternative Lösung. womit ich die Anmeldung bzw. Bestätigung automatisiert in meinem C#-Programm machen würde...

Ich freue mich wirklich auf Ideen...

Vielen Dank!

VG, Carvin

16.842 Beiträge seit 2008
vor 6 Jahren

Nein. Bitte lies einfach mal die Beschreibung des SDK und der API, denn da steht es auch.

Gegenüber APIs authentifiziert man sich i.d.R. mit einem Token-Verfahren wie OAuth; niemals mit fixen User Credentials.
Genau das verwendet auch das SDK. Das SDK hat dazu entsprechend einen fertigen Client und die Methode AuthorizeAsync.

In https://api.immobilienscout24.de/get-started.html steht auch, dass Du zunächst mal überhaupt einen API Access beantragen musst.
Und über OAuth bekommst Du dann den Token.

Das steht ebenfalls im Playground, den Du benutzt.
https://api.immobilienscout24.de/get-started/playground.html

H
hanowde Themenstarter:in
5 Beiträge seit 2017
vor 6 Jahren

Guten Morgen,

Danke für die Antwort!

Ja, es habe ich eigentlich schon verstanden. Aber bevor ich den Access-Token bekomme, muss ich noch einen Verifier-Code der Funktion als Parameter übergeben, wie kann ich den Verifier-Code via OAuth mit den Request-Token(via SDK generiert) bekommen?? Dafür gibt es keine Methode...

Ich bin seit einigen Tagen dabei mich mit dem SDK auseinander zu setzen...Ich wollte die Funktion AuthorizeAsync() erweitern, um zuerst über (einzuloggende) Seite [ z.B.: https://rest.sandbox-immobilienscout24.de/restapi/security ] den Verifier-Code zu bekommen, aber davor muss die Seite eingeloggt sein...

Wenn die Seite mit meinen Zugangsdaten eingeloggt ist, dann wird die 2. Seite in dem Browser mit dem CODE geöffnet, dann könnte ich den Code in meinem Programm speichern, so denke ich...

[1] Aber wie sollte ich machen, damit die Seite zuerst automatisch eingeloggt sein?

[2] Wie mache ich es, damit der Button der 2. Seite auf welcher der Code angezeigt wird, geklickt wird?

Vielen Dank!

16.842 Beiträge seit 2008
vor 6 Jahren

So funktionieren aber Token nicht, man muss sich nicht vorher irgendwo einloggen. Man drückt da nicht irgendwo einen Button. So funktioniert eine API nicht.
Bitte teste doch den OAuth Endpunkt, wie es in der API Dokumentation steht.

Wenn Du eine Anwendung mit Benutzeroberfläche hast und den UserContext brauchst, dann leitest Du den Benutzer auf einen Login-Screen um und gibst hier die Client Id Deiner Anwendung mit.
Nach dem erfolgreichen User Login leitet Dich dann die Loginseite zurück zu Deiner Anwendung und gibt Dir dann den Access Token, mit dem Du auf die API zugreifen kannst.

Im GitHub des SDK liegt sogar eine Beispielanwendung:
https://github.com/mganss/IS24RestApi/blob/master/SampleConsole/Program.cs

Ansonsten kann man sich das Prinzip des Token austauschs auch in meinem Beispiel Projekt anschauen:
IdentityServer4 Plattform Beispiel basierend auf .NET Core und ASP.NET Core

H
hanowde Themenstarter:in
5 Beiträge seit 2017
vor 6 Jahren

Hi,

Danke für die Antwort!

Hast du IS24RestAPI von GitHub selbst ausprobiert?

Seit einigen Tagen beschäftige ich mich schon damit...wenn du Zeit hättest, kannst du gerne mal diese testen, dann wirst du wissen was für Problem ich momentan habe.

Bei der Nutzung beider Funktionen:

  1. AuthorizeAsync(config): braucht man nur die beiden Tokens(ConsumerKey, ConsumerSecret) als Config-Daten um eine Anfrage zu dem Server zu erstellen. Dabei muss man auf der geöffnten Seite entweder einloggen (wenn man noch nicht eingeloggt ist) oder auf den Button Bestätigung drücken, danach bekommt man den Verifier-Code, damit kann man mit Hilfe von GetAccessToken(verifier) wieder die beiden Tokens(AccessToken, AccessSecret) bekommen.

  2. TestAsync(config): Braucht man in der Config schon alle 2 Tokens und 2 Accesses.

Diese Beispielanwendung möchte ich gerne so erweitern, dass das Einloggen und Bestätigung automatisiert werden kann. Wäre es möglich?

Danke!

VG, Carvin

16.842 Beiträge seit 2008
vor 6 Jahren

Ich weiß nicht, ob Du es nicht verstehen kannst oder nicht verstehen willst - oder es hapert an der Erklärung, was Du für ein Problem denn hast.
Eine API Client drückt jedenfalls keinen Knopf!

Aber alles steht in der Doku; ich werde nicht für Dich die Aufgaben machen.
Wenn Du das oder OAuth einfach nicht durchlesen willst, dann kann ich Dir leider auch nicht (mehr) helfen.

OAuth ist ein standardisiertes Protokoll; Id und Secret gibt es hier in jeder Implementierung, auch in der Beispielimplementierung und auch in meinem GitHub Link.

Auf https://playground.immobilienscout24.de/rest/playground funktioniert alles, wie es dokumentiert ist.
Wenn Du dem .NET SDK nicht vertraut, dann musst Du das halt selbst schreiben.
Ändert aber nichts an der Methodik.

Daher klinke ich mich jetzt auch aus.

T
461 Beiträge seit 2013
vor 6 Jahren

Hey, also daher du anscheinend keine Fehlermeldungen bekommst, sondern irgenwas falsch machst, da du nach deinem Reden einen Button drücken mußt, wäre es eine Hilfe für jeden Lesenden hier, wenn du den letzteren Stand deines Codeteils + Anforderungsurls mal postest, sonst kann man sich alles nur aus den Fingern saugen 😃

Zudem sieht es hier eher nach herumprobiererei aus, als eine konkrete Linie zu verfolgen... (ich kenn mich da aus, war bei mir eine Zeit lang auch so...)

Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen... 😄