Erstellen einer API für mobile Anwendungen - Authentifizierung und Autorisierung

Übersicht

Ich bin auf der Suche zu erstellen, die eine (REST) - API für meine Anwendung. Die erste/primäre Zweck werden für die Nutzung von mobile apps (iPhone, Android, Symbian, etc.). Ich habe auf der Suche in verschiedene Mechanismen für die Authentifizierung und Autorisierung für web-basierte APIs (durch das Studium von anderen Implementierungen). Ich habe meinen Kopf gewickelt, um die meisten der grundlegenden Konzepte, bin aber noch auf der Suche nach Anleitung in ein paar Bereichen. Das Letzte, was ich tun möchte, ist neu erfinden das Rad, aber ich bin nicht auf der Suche nach einem standard-Lösungen, die genau meinen Kriterien (wie auch immer, meine Kriterien, meine fehlgeleitet, so fühlen sich frei, um Kritik, als auch). Darüber hinaus möchte ich die API für alle Plattformen/Anwendungen verbraucht es.

oAuth

Ich werde gehen Sie vor und werfen meinen Einwand, oAuth, da ich weiß, dass wird wahrscheinlich die erste Lösung angeboten. Für mobile Anwendungen (oder genauer nicht-web-Anwendungen), scheint es einfach falsch, sich auf die Anwendung verlassen (gehen Sie zu einem web-browser) für die Authentifizierung. Darüber hinaus gibt es keine Möglichkeit (ich bin mir bewusst,) für den browser, um die Rückkehr der callback an die Anwendung (besonders cross-platform). Ich weiß, ein paar apps, die das tun, aber es fühlt sich einfach falsch und gibt eine Pause in der Anwendung UX.

Anforderungen

  1. Benutzer gibt Benutzernamen/Passwort in der Anwendung.
  2. Jeden API-Aufruf wird ermittelt, indem die aufrufende Anwendung.
  3. - Overhead ist auf ein minimum reduziert und die auth Aspekt ist intuitiv für Entwickler.
  4. Der Mechanismus ist sicher für die end-Benutzer (Ihre Zugangsdaten werden nicht ausgesetzt) als auch dem Entwickler (Ihre Bewerbungsunterlagen werden nicht aufgedeckt).
  5. Wenn möglich, nicht https erforderlich (keine harte Anforderung).

Meine Aktuellen Gedanken über die Umsetzung

Einem externen Entwickler Anfrage ein API-Konto. Sie erhalten eine apikey und apisecret. Jede Anfrage erfordert mindestens drei Parameter.

  • apikey - gegeben, um Entwickler bei der regisration
  • timestamp - Doppel als einen eindeutigen Bezeichner für jede Nachricht für einen bestimmten apikey
  • hash - der hash der timestamp + die apisecret

Den apikey ist erforderlich, um die Anwendung zu identifizieren, die das ersuchen gestellt. Der timestamp wirkt ähnlich wie die oauth_nonce und vermeidet/mildert replay-Angriffe. Der hash wird sichergestellt, dass die Anfrage wurde tatsächlich ausgegeben vom Inhaber der angegebenen apikey.

Für authentifizierte Anforderungen (diejenigen gemacht, die auf den Namen eines Benutzers), ich bin immer noch unentschlossen zwischen gehen mit ein access_token route oder einen Benutzernamen und ein Kennwort-hash-combo. So oder so, irgendwann wird ein Benutzername/Passwort-Kombo benötigt. Also, wenn Sie es tut, wird ein hash aus mehreren Informationen (apikey, apisecret, timestamp) + das Passwort verwendet werden würde. ich würde gerne feedback zu diesem Aspekt. FYI, Sie hätten hash des Passwortes, da ich nicht speichern Sie die Kennwörter in meinem system ohne hashing.

Fazit

FYI, dies ist nicht eine Anforderung für den Aufbau/Struktur der API in der Regel nur zu behandeln, wie die Authentifizierung und Autorisierung von ausschließlich innerhalb einer Anwendung.

Zufällige Gedanken/Bonus-Fragen

Für APIs, die nur verlangen, einen apikey als Teil der Anforderung, wie verhindern Sie, dass jemand anderes als der apikey Besitzer in der Lage, Sie zu sehen, die apikey (da in Klartext gesendet) und übertriebene Anforderungen an, schieben Sie Sie über Nutzungsbeschränkungen? Vielleicht bin ich auch nur über das denken, aber nicht sollte es etwas sein, zu authentifizieren, dass ein entsprechender Antrag wurde überprüft, um die apikey Besitzer? In meinem Fall war der Zweck der apisecret, es wird nie angezeigt/übertragen ohne Hash.

Sprechen von hashes, was über md5-vs-hmac-sha1? Ist es wirklich wichtig, wenn alle Hash-Werte sind mit ausreichend langen Daten (ie. apisecret)?

Ich hatte zuvor erwägt, ein pro Benutzer/row Salz auf meiner Benutzer-Passwort-hash. Wenn ich das, wie könnte die Anwendung in der Lage sein zu erstellen, eine passende hash-ohne zu wissen, das Salz, das benutzt?

InformationsquelleAutor der Frage jsuggs | 2010-10-18

Schreibe einen Kommentar