Login via POST

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Login via POST

    Hallo...

    in unserer Firma gibt es ein internes Dokumentensystem, wo unter anderem auch unser Dienstplan zur Verfügung gestellt wird.
    Diesen möchte ich per App downloaden. Sodass ich komfortabel an das gewünschte Dokument komme.

    Folgendes konnte ich per Quellcode der Website ermitteln. Nach jedem Login bekommt man eine Session-ID. Diese Bildet dann den Link zum jeweiligen Dokument.
    Das sieht in etwa dann so aus:

    Quellcode

    1. [url]https://sub.Domain.com/jcrfile/Dienstplan.jpg?id=bbc405b7-7e3d-4294-b5d7-876257d9c8d0&cid=96943&open=b[/url]


    Nun möchte ich mich per App dort einloggen, die Session-ID parsen und dann daraus den Link zum Dokument generieren, sodass ich das JPG dann downloaden kann.

    Leider scheiter ich am Login. Etwas ähnliches konnte ich bei einer PHP in einem anderen Projekt problemlos bewerkstelligen.

    Hier der Code der HTML, was den Login betrifft:

    Quellcode

    1. <form id="login" name="login" method="post" action="/login.html" enctype="application/x-www-form-urlencoded">
    2. <input type="hidden" name="login" value="login" />
    3. <input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="j_id1" />
    4. <div id="login:usernameDecorator">
    5. <div class="prop"><label for="login:usernameDecorator:username" class="name ">
    6. Nutzername</label>
    7. <span class="value "><input id="login:usernameDecorator:username" type="text" name="login:usernameDecorator:username" />
    8. <script type="text/javascript">focusInputById('login:usernameDecorator:username');</script>
    9. </span>
    10. <span class="error">
    11. </span>
    12. <div class="clear"></div>
    13. </div></div><div id="login:passwordDecorator">
    14. <div class="prop"><label for="login:passwordDecorator:password" class="name ">
    15. Passwort</label>
    16. <span class="value "><input id="login:passwordDecorator:password" type="password" name="login:passwordDecorator:password" value="" />
    17. </span>
    18. <span class="error">
    19. </span>
    20. <div class="clear"></div>
    21. </div></div><div id="login:rememberMeDecorator">
    22. <div class="prop"><label for="login:rememberMeDecorator:rememberMe" class="name ">
    23. Nutzer merken</label>
    24. <span class="value "><input id="login:rememberMeDecorator:rememberMe" type="checkbox" name="login:rememberMeDecorator:rememberMe" class="checkbox" />
    25. </span>
    26. <span class="error">
    27. </span>
    28. <div class="clear"></div>
    29. </div></div><div id="login:stayLoggedInDecorator">
    30. <div class="prop"><label for="login:stayLoggedInDecorator:stayLoggedIn" class="name ">
    31. Angemeldet bleiben</label>
    32. <span class="value "><input id="login:stayLoggedInDecorator:stayLoggedIn" type="checkbox" name="login:stayLoggedInDecorator:stayLoggedIn" />
    33. </span>
    34. <span class="error">
    35. </span>
    36. <div class="clear"></div>
    37. </div></div>
    38. <div class="dialogButtons"><input id="login:button-login" type="submit" name="login:button-login" value="ANMELDEN" onclick="Richfaces.showModalPanel('loginWaitDialog');return true;" class="dialogButtonWide" />
    39. </div>
    40. <div class="dialogSeparator" style="width:390px;"></div>
    41. <ul class="dialogLinkList">
    42. <li class="dialogLink"><a href="/clientPWReset.html?cid=388265" id="login:changePassword">Passwort vergessen</a></li>
    43. </ul>
    44. </form>
    Alles anzeigen


    folgendes habe ich versucht, bekomme als Response aber nur die Website im "un-eingeloggten" Zustand:

    Quellcode

    1. NSString *post = @"username=meinUsername&password=meinPasswort";
    2. NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    3. NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];
    4. NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    5. [request setURL:[NSURL URLWithString:@"https://sub.DOMAIN.com/login.html"]];
    6. [request setHTTPMethod:@"POST"];
    7. [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    8. [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    9. [request setHTTPBody:postData];
    10. NSURLConnection *NSNconnect = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    11. [NSNconnect start];
    Alles anzeigen


    Kann mir jemand zeigen, wo der Fehler liegt?

    Gruß, TWEAK
  • gritsch schrieb:

    außderm: ASCII-encoding passt in dem fall vielleicht noch aber wenns dann um umlaute geht...

    Umlaute sollten immer mit Escapes kodiert sein, so dass er an dieser Stelle ruhig ASCII verwenden kann.

    @Tweak: Versuch mal die Parameter id=bbc405b7-7e3d-4294-b5d7-876257d9c8d0&cid=96943&open=b (mit der aktuellen Session-ID).
    „Meine Komplikation hatte eine Komplikation.“
  • @gritsch: Das Form erwartet doch "username" und "password", oder? Hab ich nen Denkfehler?

    @macmoonshine: Wenn ich die aktuelle Session-ID verwende, komme ich an das Dokument. Leider scheint der Login ja nicht zu funktionieren, sodass ich via App nicht an eine gültige Session-ID komme.
    Der Plan ist, via IBAction einloggen, Session-ID parsen und dann daraus einen Link basteln und das hinterlegte Dokument downloaden.

    Irgendwie drehe ich mich im Kreis...
  • Quellcode

    1. ​-(void)connectTEST{
    2. NSString *post = @"login:usernameDecorator:username=MEINUSERNAMEt&login:passwordDecorator:password=MEINPASSWORT";
    3. NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    4. NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];
    5. NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    6. [request setURL:[NSURL URLWithString:@"https://SUB.DOMAIN.com/login.html"]];
    7. [request setHTTPMethod:@"POST"];
    8. [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    9. [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    10. [request setHTTPBody:postData];
    11. NSURLConnection *NSNconnect = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    12. [NSNconnect start];
    13. }
    14. - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
    15. {
    16. NSString * string = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
    17. NSLog(@"%@",string);
    18. }
    Alles anzeigen


    Als Output (string) erhalte ich weiterhin den Quellcode der Website im nicht eingeloggten Zustand.

    Wenn ich mich via Browser mit falschen Daten einlogge, bekomme ich die Meldung "Anmeldung fehlgeschlagen". Im Output fehlt dieser Satz. Scheinbar funktioniert der POST-Befehl dann nicht, oder?
    Ich habe echt keinen Plan, woran es schon hapert und so komme ich nicht weiter. Hat jemand noch ne Idee?
  • Anfrage-Parameter? Hatte bisher nur den Quelltext-Viewer genutzt. Ich schaue mir das mal an.
    Kurz dazu: Sehe ich da, was eine Website als Parameter anfordert?

    Edit: Wo finde ich die Anfrage-Parameter? Sorry, dass ich da so unerfahren/unwissend bin.
    Edit2: Würde nur ungern die Seite hier öffentlich posten. Privat sowas zu versenden kommt hier aber wohl auch nicht gut an. Ein Dilemma :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Tweak ()

  • Danke Euch für die Infos:

    Als Anfragedaten erhalte ich:

    Quellcode

    1. ​login=login&javax.faces.ViewState=j_id1&login%3AusernameDecorator%3Ausername=[i]MEINUSERNAME[/i]&login%3ApasswordDecorator%3Apassword=[i]MEINPASSWORT[/i]&login%3Abutton-login=ANMELDEN


    Als Antwort erhalte ich dann den Quelltext der "eingeloggten" Website. Jetzt habe ich mit diesem "Anfrage-String" in Xcode gespielt und bekomme dennoch als Response immer nur den Quelltext der nicht eingeloggten Website.

    Hat das irgendwie mit Java zu tun, dass es via Xcode nicht klappt?
  • Tweak schrieb:

    als Response immer nur den Quelltext der nicht eingeloggten Website.

    Was meinst du mit Quellcode? Was willst du sonst bekommen?

    Hast Du dir mal die Response-Header angesehen (Stichworte Cookies und Location)?

    Tweak schrieb:

    Hat das irgendwie mit Java zu tun, dass es via Xcode nicht klappt?

    Xcode kann sich niemals auf deinem Server einloggen, da Xcode eine IDE ist, und nein, mit Java hat das auch nichts zu tun.
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    Was meinst du mit Quellcode? Was willst du sonst bekommen?


    Wenn ich mich auf der Website per Browser einlogge, werde ich unter anderem mit meinem Namen begrüßt bzw steht mein Name dann auch im Quellcode der angezeigten Website. Das ist also der Quellcode der "eingeloggten" Website.

    Dies möchte ich auch erreichen, wenn ich mich via App auf der Website einlogge. Mir geht es nicht um den Namen, sondern darum, dass ich ja die jeweilige Session-ID abgreifen muss.

    In Xode erhalte ich als Response String allerdings nur den gesamten Quelltext der Website, wo noch nach meinem Benutzernamen/Passwort gefragt wird. Das einloggen scheint also weder geklappt zu haben, noch scheint es gar kein POST gegeben zu haben, denn ein gescheiterter Loginversuch wird auch nicht angezeigt.
    Mir kommt es so vor, als wenn der POST-Befehl gar nicht zur Anwendung kommt.
  • Tweak schrieb:

    In Xode erhalte ich als Response String allerdings nur den gesamten Quelltext der Website,

    Xcode ist eine IDE. Dein Programm erhält die Antwort vom Server. Versuch bitte, die Begriffe richtig zu verwenden.

    Tweak schrieb:

    wo noch nach meinem Benutzernamen/Passwort gefragt wird. Das einloggen scheint also weder geklappt zu haben, noch scheint es gar kein POST gegeben zu haben, denn ein gescheiterter Loginversuch wird auch nicht angezeigt.
    Mir kommt es so vor, als wenn der POST-Befehl gar nicht zur Anwendung kommt.

    Wenn die Anfrage nicht um Server ginge, würdest du von dort auch keine Antwort erhalten, oder?

    Hast du mal die Response-Header geprüft? Schreib' die mal in die Konsole und schau dir die Cookies an. Die stehen u. A. im Antwort-Header. Gibt es einen Location-Header?
    „Meine Komplikation hatte eine Komplikation.“
  • Hab es jetzt damit versucht:

    Quellcode

    1. - (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSHTTPURLResponse *)response {
    2. if (request != nil) {
    3. NSLog(@"Request: %@", request);
    4. }
    5. if (response != nil) {
    6. NSLog(@"Response: %@", response);
    7. }
    8. else{
    9. NSLog(@"Keine Antwort");
    10. }
    11. return request;
    12. }
    Alles anzeigen


    Als Ergebnis brachte die Konsole:

    Quellcode

    1. 2015-02-06 13:10:37.650 Project[1618:462690] Request: <NSURLRequest: 0x7fff23d14220> { URL: https://SUB.DOMAIN.com/login.html }
    2. 2015-02-06 13:10:37.651 Project[1618:462690] Keine Antwort