Ich erstelle eine plattformübergreifende mobile Anwendung (mit den Xamarian Tools, MonoTouch / MonoDroid). Ich versuche, den Authentifizierungs-Workflow durchzuarbeiten und stolperte in einen Stolperstein. Ich habe überall nach einer klaren Antwort gesucht und muss sie noch finden.
Hier ist eine Übersicht meiner aktuellen Einstellungen.
Ich habe eine Website in nodejs gebaut. Ich benutze pass.js um oAuth Login auf der Website zu tun. Das funktioniert super, Benutzer können sich mit Twitter oder Facebook auf meiner Seite einloggen.
Jetzt möchte ich die gleiche Anmeldefunktionalität auf meine mobilen Clients erweitern.
Ich sehe 2 Optionen
Betten Sie die App-ID und App-Secrets in die mobilen Clients ein und führen Sie direkte oAuth-Aufrufe von der mobilen App an FB oder Twitter durch
Proxy, den der oAuth über meinen bestehenden nodejs Webserver aufruft (die geheimen Schlüssel auf dem Server verwaltend)
Option 2 scheint der bevorzugte Weg zu sein (da es das Verschicken des Geheimnisses in den mobilen Apps vermeidet).
Ich habe den Proxy-Ansatz meistens funktioniert.
http://mysever/auth/twitter
Hier ist mein Problem :
Es ist dieser letzte Schritt, der mich verstopft. Sobald der Handshake auf meinem Server abgeschlossen ist, habe ich die Benutzerinformationen, die ich auf dem Server brauche, und muss sie an die mobile Client-Anwendung zurücksenden
Ich kann im WebView-Steuerelement keine Möglichkeit finden, das Antwortobjekt zu greifen und einen Cookie oder einen Header-Wert (zum Beispiel) zu holen (dies scheint für Android und iOS zu gelten). Ich denke nicht, dass es plattformspezifisch ist. Ich denke, ich versuche etwas zu tun, das ein WebView-Widget in mobilen Plattformen einfach nicht unterstützt. Es lässt mich denken, dass ich etwas Offensichtliches vermisse.
Das Einzige, was ich herausgefunden habe, ist, dass mein Webserver den mobilen Client-Browser zu einer gefälschten URL umleitet, die die Benutzerinformationen in der Abfrage enthält. So etwas wie myapp: // info? Userid = 1234
Dann kann ich in der mobilen App die URL laden und diese URL holen und die Daten bekommen, die ich brauche. Ich kann dann diese Benutzerinfo speichern, das WebView-Steuerelement schließen und zu einem nativen Bildschirm in meiner mobilen Anwendung wechseln und die Benutzerinfo in nachfolgenden REST-Aufrufen an meinen Nodejs-Server verwenden, um den Benutzer zu identifizieren.
Dies ist aus mehreren Gründen massiv kludgy. Die größte davon ist, dass die URL unverschlüsselt über das Kabel gesendet wird und alle Daten im Klartext vorliegen.
Es muss einen besseren Weg geben, um die Daten vom Webserver zum mobilen Client zurück zu bekommen.
Oder mache ich alles falsch?
Die einfachste Art, OAuth für Xamarin sowohl für iOS als auch für Android zu implementieren, ist Xamarin.Auth . Die Starter-Dokumentation für den Client ist hier . Ich denke, es sollte alles sicher erhalten und Sie müssen sich keine Sorgen darüber machen, Ihren Node-Server als Proxy verwenden zu müssen.
Sie müssen Ihre Anwendungs-ID als Teil der Anrufe angeben, aber ich habe dort nicht zu viele oder irgendwelche Sicherheitsprobleme, um die ich mich kümmern muss.
Ich weiß, dass dies gegen das ist, was Sie bereits implementiert haben, aber vielleicht könnte dies dazu beitragen, die Dinge ein wenig zu vereinfachen.
Dies ist das gleiche Dilemma, mit dem ich es zu tun habe. So gehe ich derzeit damit um. In meiner App kann der Kunde direkt oder über einen anderen Dienst wie Facebook, das ist mein Haupt und daher die, auf die ich mich konzentriert habe, kommen.
Facebook kann entweder über einen POST (Desktop Apps) oder ein GET (Handy) umleiten.
Ich überprüfe die anfängliche Anfrage, um zu sehen, ob sie eine Service-ID hat - hier ist zum Beispiel das Facebook GET.
%Vor%Der facebook POST unterscheidet sich ein wenig dadurch, dass Sie in base64url einen Access Token encode erhalten. Das GET gibt Ihnen einen Code, den Sie gegen ein Zugangstoken eintauschen können, aber ich hatte Probleme damit und habe mich nur für die Einbindung in das Pass-System entschieden.
Wenn ein Client direkt kommt, suche ich nach der Sitzung oder nach einem verschlüsselten Cookie, das in die lokale Strategie eingebunden ist. Dies überprüft dann die db für ein Zugriffs-Token, mit dem beispielsweise auf die facebook API zugegriffen werden kann.
Wenn ein Kunde nicht erkannt wird, kann er sich über Facebook, Google usw. authentifizieren.
Die Hauptsache ist, dass nur zwei Informationen zusammen mit dem Client gespeichert werden, die Pass-Session-ID und die App-Nutzer-ID
connect.sid - verschlüsselter Cookie
userId - verschlüsselter Cookie
Ich wäre daran interessiert, herauszufinden, wie andere Leute mit dem Thema umgehen.
Tags und Links oauth node.js xamarin.ios xamarin.android passport.js