Empfohlene Konfiguration für Web Client und Mobile REST API Security

9

Mir ist klar, dass es eine Menge Fragen zu diesem Thema gibt, und ich recherchiere seit ein paar Tagen darüber. Ich möchte sicherstellen, dass meine Frage so spezifisch wie möglich ist, da ich erst noch den besten Ansatz verstehen muss.

Momentan habe ich eine entwickelte Django-Site, wobei der Webclient wahrscheinlich über 95% über eine Django-Kolben-JSON-REST-API kommuniziert. Die anderen 5% sind einige Remanenz-Login-Funktionen, die immer noch POST-Formulare mit CSRF-Schutz durchlaufen. Idealerweise möchte ich den Rest auch in die REST API verschieben.

Ich bin jetzt an dem Punkt, an dem ich herausfinden muss, welche Lösung für den Webclient und den mobilen Client (App, die noch entwickelt werden soll) in einer wiederverwendbaren und glücklicherweise koexistierenden Weise empfohlen wird. Ich habe viele Beiträge gelesen, die letztendlich OAuth2 (und https) für die mobile Seite empfehlen, aber ich bin immer noch verwirrt darüber, wie man die Sicherheit des Webclients einrichtet. Ich verstehe auch den OAuth2 Aspekt und ob ich die 2-beinige Form benutzen kann. Wie es steht, ist der Web-Client django authentifiziert. Technisch gesehen ist die jsonp-Funktionalität immer noch in piston aktiv, also würde ich denken, dass irgendjemand die API von einer 3rd-Party-App verwenden könnte, solange ihre Websession die Authentifizierungs-Cookies hat?

Zusammenfassung der Verwendung meiner API:

  1. Die API ist eine vollständig private Schnittstelle zur Server-App
  2. Es wäre ideal, wenn die API nicht in großem Umfang von Web-Client-Mashups von Drittanbietern wiederverwendet werden könnte.
  3. Die Daten sind nicht necc-sensitiv. Es ist nur eine Social-Site mit den meisten persönlichen Informationen wie E-Mails, Adressen, etc.

Zusammenfassung meiner Fragen:

  1. Ist OAuth2 der am besten empfohlene Ansatz zum Sichern des Zugriffs auf mobile Apps? Hat es etwas mit dem Web-Client-Aspekt zu tun? Und wenn OAuth2 empfohlen wird, sollte es ein anwendungsweiter Schlüssel sein, der mit den App-Versionen versioniert wird?
  2. Sollte der Webclient CSRF verwenden, der über AJax weitergegeben wurde, und einfach jsonp deaktivieren, um sicherzustellen, dass er immer denselben Ursprung hat? Grundsätzlich behandle ich die Sicherheit des Webclient separat?
  3. Wie sollte ich die URLs / App-Instanzen / Subdomains organisieren oder was immer empfohlen wird, um die Sicherheit von Web und Mobil zu erhalten? Benötige ich nur separate URL-Präfixe, eines für Mobilgeräte, das andere Regeln verwendet?

Ich suche nach django-kolbenspezifischen Empfehlungen zur Lösung dieser Probleme. Ich habe mein Projekt bereits abgezweigt und begann mit dieser gegabelten Version von Kolben zu spielen: Ссылка

Eine Idee, die ich hatte, war, eine Kolbenressource zu erstellen, die zuerst prüft, ob sie dieselbe Herkunft hat und dann nur die Django-Auth durchsetzt, andernfalls setzt sie Oauth2 durch, aber ich bin mir nicht sicher, ob dies überhaupt angemessen ist.

Update 1/1/2012

Von den Informationen, die Spike zur Verfügung gestellt hat, habe ich angefangen, mit piston-oauth2 zu arbeiten. Ich habe am Ende eine Gabelung daraus erstellt, um einige Fixes für Nonrel-Django (Mongodb) hinzuzufügen, und ich gab ein Beispiel, um auch oauth2 und piston zu verwenden:

Ссылка

Jetzt ist es nur eine Sache von mir, dass ich das wirklich an mein eigenes Projekt angehängt habe und es funktioniert. Aber diese Tests funktionieren alle großartig.

    
jdi 28.01.2012, 22:13
quelle

1 Antwort

4

Ich bin alles für OAuth2, also werde ich basierend auf dieser Lösung antworten.

  

Ist OAuth2 der am besten empfohlene Ansatz zum Sichern der mobilen Apps?   Zugriff? Hat es etwas mit dem Web-Client-Aspekt zu tun? Und wenn   OAuth2 wird empfohlen, wenn es sich um einen anwendungsweiten Schlüssel handelt   versioniert mit den App-Releases?

Ja, OAuth2 wird im Moment als der empfohlene Ansatz angesehen. Es ist viel einfacher als OAuth1. Ich würde empfehlen, die Spezifikation anstatt der Blog-Posts über die Spezifikation als Spezifikation zu lesen selbst ist sehr deutlich geschrieben. Jenseits der Spezifikation ist es nützlich, sich etablierte Implementierungen wie Facebooks und Foursquare's , da sie die Spezifikation nicht in jeder Hinsicht befolgen, sondern einige Änderungen vornehmen, um praktischer und einfacher zu verwenden.

Wie bei der Versionierung der Releases ist dies aus einer dogmatischen REST-Perspektive . Aus einer pragmatischeren Perspektive ist dies jedoch eine weit verbreitete Praxis und macht das Leben sowohl für die API-Entwickler als auch für die Clients viel einfacher. Ich würde empfehlen, den Apigee Blog zu lesen, da sie viele Beiträge zu Themen wie Versionierung haben.

  

Sollte der Webclient CSRF verwenden, das über Ajax übergeben wurde, und nur?   Deaktivieren Sie Jsonp, um sicherzustellen, dass es immer denselben Ursprung hat? Grundsätzlich bin ich   die Sicherheit des Webclient separat behandeln?

Wenn Sie mit einer vollständigen oauth2-Lösung arbeiten, sollten Sie Site-übergreifende API-Anfragen aktivieren. Um Apps zu verwerfen, die du nicht kennst, kannst du einfach Checks dafür hinzufügen, wenn du dir die access_tokes ansiehst. Hier ein kleiner Überblick über die verschiedenen Möglichkeiten, die du hast:

Ссылка

  

Wie soll ich die URLs / App-Instanzen / Subdomains organisieren?   Was wird empfohlen, um die Sicherheit von Web und Mobile aufrechtzuerhalten? Tu ich   brauchen nur separate URL-Präfixe, eine für Mobilgeräte, die andere verwenden   Regeln?

Entscheiden Sie einfach, was für Sie funktioniert. Viele Leute haben ihre mobile Website auf "m.mysite.com" oder "mobile.mysite.com" in diesen Tagen. Diese Entscheidung hängt nicht wirklich mit der gesamten Authentifizierungsdiskussion zusammen, wenn Sie eine vollständige OAuth2-Implementierung verwenden.

  

Ich suche nach django-kolbenspezifischen Empfehlungen zum Lösen   diese Probleme. Ich habe mein Projekt bereits abgezweigt und angefangen zu spielen   mit dieser gegabelten Version des Kolbens:    Ссылка

Das ist mir nicht bekannt, da ich tastypie verwende. Wenn es nicht gut für Sie funktioniert, gibt es einen ausgezeichneten Django OAuth2 Standalone-Server, den ich verwendet habe:

Ссылка

    
Spike 29.01.2012, 18:14
quelle