2012-04-10 12 views
7

Ich schreibe einen Server verwendet ASP.NET Web API-Vorlage und Implementierung Rest-Dienste. Dieser Server ist ein Backend für ein mobiles Spiel, in dem die Highscores, Fortschritte und andere Informationen der Benutzer gespeichert werden. Ich habe mir eine Reihe von Ansätzen angesehen (this, this und this) und ich habe Probleme zu entscheiden, welchen Ansatz ich verwenden soll. In meinem Fall möchte ich Betrug vor allem verhindern, da jedes Benutzerkonto begrenzte Informationen (außerhalb seiner E-Mail) enthält. Hier wäre, was im Idealfall passieren würde.Authentifizierung und Autorisierung mit REST und ASP.NET Web API von plattformübergreifenden mobilen Anwendungen

  1. Benutzer öffnet App zum ersten Mal
  2. Benutzer angegeben wird Option für individuelle Benutzernamen und dies wird durch Server überprüft, so gibt es nicht
  3. Benutzer dupliziert wird eine zufällig generierte sechsstellige PIN-Nummer gegeben (so können sie das gleiche Konto auf verschiedenen Telefonen verwenden)
  4. Benutzer gibt E-Mail-Adresse
  5. Neuer Benutzer auf Server erstellt wird (Server überprüft, dass das Konto durch eine gültige Instanz von meinem Client-Anwendung)
  6. 0 erstellt wurde
  7. Benutzer spielt Spiel, uploads Ergebnisse (Über grundlegende Authentifizierung?)
  8. Benutzer können globale Ergebnisse (keine Sicherheit auf GET-Methoden anzuzeigen, die nicht benutzerspezifisch) sind

Ich habe Probleme Eingrenzung, welche Art der Authentifizierung (keine Browser-Login-Bildschirme und so weiter) und Autorisierung Methoden zu verwenden. Jede Hilfe würde sehr geschätzt werden.

-Tamas

+0

Vielleicht wäre in diesem Fall eine einfache Authentifizierung ausreichend? Aber ich bin mir immer noch nicht sicher, wie ich sicherstellen kann, dass jemand über einen gültigen Client auf die Rest-API zugreift. – tamaslnagy

Antwort

5

Auch wenn Sie die Standardauthentifizierung verwenden, sollten Sie HTTPS verwenden. Wenn Sie HTTPS verwenden, können Sie auch Client-Zertifikate verwenden, um den Client zu überprüfen. Nur Clients mit einem gültigen Zertifikat erhalten Zugriff. Wenn Sie diese API nicht für andere Benutzer öffnen und sie nur von einem von Ihnen entwickelten Client verwendet wird, sollten Sie WS-Security und WCF in Erwägung ziehen. Es gibt eine unterhaltsame Beschreibung der Unterschiede mit nackten Motorradfahrer als Metapher here.

+0

Ich werde mehrere Sprachen (Java, Obj-C und C# /. NET) verwenden, also weiß ich nicht, ob die WS-Sicherheit/wcf-Methode funktionieren würde. Ist die Client-Zertifikat-Methode plattformübergreifend? – tamaslnagy

+0

Wenn es plattformübergreifend ist, würde ich empfehlen, mit REST zu bleiben. Das Client-Zertifikat ist plattformübergreifend. –

+0

Klingt gut. Ich werde es mir ansehen.Außerdem habe ich nie verstanden, wie die Erstanmeldung mit dem Basis-Authentifizierungssystem erfolgte, dh wenn der eingegebene Benutzername und das Passwort noch nicht in der Server-Datenbank enthalten sind. – tamaslnagy

1

Wenn es von verschiedenen Client/Geräte ist, so etwas wie Token basierende Authentifizierung könnte für Sie arbeiten.

Die Idee ist einfach, Sie haben Authentifizierungsmethode in Ihrem Web-Service. Diese Methode ist verantwortlich für die Überprüfung der Anmeldeinformationen und die Ausgabe von "Token". Eine einfache Struktur wie SHA1 oder MD5, die alle weiteren Client-Aufrufe verwenden.

Wenn der Client authentifiziert ist, wird das Token für die gesamte Sitzung gespeichert. Der Rest der Web-Service-Methoden, wie SaveScore akzeptiert nur Token als Parameter. Sie sind dann verantwortlich zu überprüfen, ob es gültig ist oder nicht. Wenn das Token nicht gültig ist, wird der Anruf nicht zugestellt.

+0

Wenn möglich würde ich eine Standardauthentifizierung gegenüber Token-basierten Methoden bevorzugen. – tamaslnagy

Verwandte Themen