2017-03-03 7 views
0

Ich hatte eine API erstellt, die ich verwende, um Daten aus einer Postgresql-Datenbank in Form von Json zu verarbeiten. Ich bin in der Lage, den Benutzer über die API mit dem Django Rest Framework zu authentifizieren und ein Authentifizierungs-Token für dasselbe zu erhalten. Jetzt muss ich auf einigen Seiten meiner App Seiten aus der Web-App in einer Webansicht anzeigen. Diese Seiten benötigen ein csrf-Token, um darauf zuzugreifen. Das csrf-Token wird auf der Schaltfläche "Senden" der Anmeldung in der Web-App generiert.iOS/Django: Wie führe ich eine duale Authentifizierung durch?

Ich kann das csrf-Token aus den Cookies extrahieren, die nach der Anmeldung generiert wurden. Also hier ist, was ich zu erreichen hoffe. Wenn ich mich vom Anmeldebildschirm meiner App aus anmelde, möchte ich programmatisch ein Webview im Hintergrund erstellen, den Benutzernamen und das Passwort eingeben und auf der Webseite auf die Schaltfläche zum Absenden tippen. Ich werde dann fortfahren, um das Token aus den Cookies zu extrahieren.

Die meisten der Teile, die ich habe, bin ich nicht in der Lage, herauszufinden, wie Sie das Webview programmatisch ausfüllen und den Absenden-Knopf drücken. (Der Grund, warum ich den Submit-Button drücken soll, ist, weil die Ansicht prüft, ob die Anfrage ein Post- und Ajax-Account ist). Kann jemand etwas Licht in die Frage bringen, wie ich auf diese Weise eine doppelte Authentifizierung durchführen kann?

+0

Warum möchten Sie nicht einfach das gleiche Token verwenden, das Sie in der App verwenden, um in der Webansicht auf alle benötigten Informationen zuzugreifen? –

+0

Das für die API generierte Token unterscheidet sich vom csrf-Token und der vom Webview generierten Sitzung. Das csrf-Token wird nur vom Browser generiert, sobald die Webansicht gerendert wurde. – Jobs

+0

Sie können eine Ansicht erstellen, in der Sie den API-Schlüssel aufnehmen und den Benutzer anmelden, der als sitzungsbasiert angemeldet ist, und dann an den von Ihnen gewünschten Ort umleiten in '? next =' param. –

Antwort

0

Wenn jemand neugierig ist, habe ich die doppelte Authentifizierung über eine versteckte Webansicht beim Login durchgeführt. Ich klicke auf die API, um das API-Authentifizierungs-Token zu erhalten, und gleichzeitig auf die Web-App-URL in meiner Webansicht. Ich fülle den Benutzernamen, Passwort und tippen Sie auf den Absenden-Button durch Code

func webViewDidFinishLoad(_ webView: UIWebView) { 
    print("loadFinished") 
    let loadUsername = "var emailText = document.getElementById('email'); emailText.value = '\(username)';" 
    let loadPass = "var passText = document.getElementById('password'); passText.value = '\(pass)';" 
    let submitAction = "var passFields = document.getElementById('login_button'); passFields.click();" 

    webView.stringByEvaluatingJavaScript(from: loadUsername) 
    webView.stringByEvaluatingJavaScript(from: loadPass) 
    webView.stringByEvaluatingJavaScript(from: submitAction) 
    print("Executed!") 

    let req = URLRequest(url: URL(string: "https://app.xyz.io/abc/")!) 
    if tf != true { 
     webView.loadRequest(req) 
     tf = true 
    } 

} 

Nach meiner Anfrage Lasten und erfolgreich authentifiziert, ich abrufen nur die csrf Token und sessionid von der Sitzung des Cookies.

Hoffe das hat jemandem geholfen!

Verwandte Themen