2013-03-09 20 views
6

Ich arbeite am Schreiben einer privaten REST API mit Play! dass ich von einer mobilen Anwendung aus anrufen werde und ich bin verwirrt, wie ich es sicher halten kann.Sicherheit mit Play! von Outside Application

Bei der Arbeit mit dem Beispiel "Yet Another Blog Engine" in Play! 'S Dokumentation habe ich ihre authentication example durchgearbeitet und es geht um die Anmeldung über einen Browser. Soweit ich das Play! -Sicherheitsmodul verstanden habe, hilft es bei Browsersitzungen. Darüber hinaus wurde jede StackOverflow-Frage, die ich gesehen habe, in ein Administrationsmodul im Web integriert, und die Fragen beziehen sich auch auf Sitzungen.

Does the Play! framework have any built in mechanism to prevent session hijacking?

Enforce Https routing for login with play framework

Mein gegenwärtiges Verständnis dafür, wie die Sicherheit funktionieren soll:

  • Die mobilen App "anmeldet", um den Web-App und eine Art von Token
  • erhält Bei jedem folgenden Aufruf wird das Token an das Ende des API-Aufrufs angehängt
  • Wenn das Mobiltelefon verwendet r „abmeldet“ oder das Token abgelaufen ist, entfernt der Web-App das Token
  • Jeder API-Aufruf HTTPS verwendet, um Sicherheit

Ist es möglich zu halten, für mich eine HTTP-Anforderung von der mobilen Anwendung zu machen Die Webanwendung, die ich mit Play erstellt habe! Framework, während es sicher bleibt?

Bin ich die ganze Situation falsch?

Dies ist das erste Spiel! App, die ich erstellt habe und das ist das erste Mal, dass ich Heroku benutzt habe. Ich bin nicht zu weit entfernt, dass ich dagegen wäre, zu etwas anderem zu wechseln, wenn es wesentlich einfacher/effizienter/besser geeignet wäre, dieses Problem zu lösen.

EDIT: Auch in Play! YABE Tutorial scheint es, als ob sie das Passwort im Klartext überprüfen. Was ist aus allgemeiner Sicht kein Sicherheitsproblem?

EDIT 2: Ich habe über OAuth Anbieter Informationen und es scheint das Problem zu lösen. Meine einzige Befürchtung ist, dass v2.0 bekannte Sicherheitslücken hat und v1.0 kompliziert zu implementieren ist, wenn ich nur eine sichere Verbindung zwischen einer mobilen App und einer Web-App brauche. Wenn ich jeden Aufruf SSL benötigen würde, könnte ich jede Play-Methode dazu bringen, Benutzernamen und Passwort als Parameter zu verwenden und OAuth vollständig zu ignorieren?

+2

„in Play 's YABE Tutorial, es scheint, als ob sie das Passwort im Klartext überprüfen "- hängt davon ab, was Sie mit Klartext meinen. Wenn es über HTTPS ist, ist es kein Problem, das Passwort in einer Anfrage zu senden. Wenn sie das Passwort in der Datenbank im Klartext speichern, ist das schlecht. Schade, wenn Tutorials aus Gründen der Einfachheit die grundlegende Sicherheit komplett ignorieren. – Nick

+0

Von den Links, die Sie verwendet haben, sieht es so aus, als ob Sie Play 1.x verwenden. Irgendein Grund, warum du nicht mit 2.x gehst? – Nick

+0

Heroku verwendet standardmäßig Play 1.2.4. Ich kenne keinen Grund, es zu aktualisieren, und die Zeit ist das Wichtigste in Bezug auf die mobile App. – eliot

Antwort

2

Ihr Beispiel für die Autorisierung einer mobilen Anwendung mit einer Webanwendung wird mit einem Berechtigungsframework wie OAuth erreicht. Dadurch kann die Webanwendung den Benutzer anmelden und dann ein Zugriffstoken an die mobile App senden, um Anfragen als dieser Benutzer zu stellen, ohne dass die mobile App das Kennwort des Benutzers verarbeiten muss.

Werfen Sie einen Blick auf ein OAuth Anbieter Modul für Play. Wenn Sie Google finden, finden Sie möglicherweise ein OAuth Client Modul für Play, aber das ist für die andere Seite von OAuth, so dass Ihre Webanwendung gegen einen Drittanbieter autorisieren kann. Sie würden dann eine OAuth-Clientbibliothek in Ihrer mobilen App verwenden, um mit dem Erwerb eines Zugriffstokens umzugehen.

Es könnte sogar eine generische Java-Bibliothek für OAuth sein - die Play 2.0 documentation for OAuth gibt an, dass sie kein OAuth 2.0-Modul bereitgestellt hat, weil es einfach genug ist, nicht einmal eine Bibliothek zu benötigen. Jedoch gibt es a few Java libraries available.

Hier ist ein Projekt, bei dem jemand zusammen Zeug einig OAuth-Anbieters mit Spiel gebracht hat (bezogen von this forum post):

https://github.com/mashup-fm/playframework-oauthprovider

+0

Ich habe anfangs OAuth angeschaut, aber ich glaube, ich wurde entmutigt, weil ich nur die Informationen zum Client-Modul fand. Und in deinem letzten Satz wolltest du eine mobile App sagen, oder? Also hätte ich den OAuth-Provider in der Web-App (Play!) Und den OAuth-Client in der mobilen App? – eliot

+0

Ja, tut mir leid, behoben. Sehen Sie sich auch meinen Zusatz an - es muss nicht unbedingt ein Play-Modul sein, da es sich um einen ziemlich einfachen Workflow handelt, den Sie selbst rollen können. – Nick

+0

Okay, ich habe mir die Informationen des OAuth-Providers angesehen und es scheint das Problem zu lösen. Meine einzige Befürchtung ist, dass v2.0 bekannte Sicherheitslücken hat und v1.0 kompliziert zu implementieren ist, wenn ich nur eine sichere Verbindung zwischen einer mobilen App und einer Web-App brauche. Wenn ich jeden Aufruf SSL benötigen würde, könnte ich jede Play-Methode dazu bringen, Benutzernamen und Passwort als Parameter zu verwenden und OAuth vollständig zu ignorieren? – eliot