Ich habe über oAuth, Amazon REST API, HTTP Basic / Digest usw. gelesen, kann aber nicht alles in "Einzelstücke" zusammenfassen. Dies ist wahrscheinlich die nächstgelegene Situation - Erstellen einer API für mobile Anwendungen - Authentifizierung und Autorisierung
Ich möchte eine API-zentrierte Website erstellen - Service. Also (am Anfang) hätte ich eine API im Zentrum und die Website (PHP + MySQL) würde über cURL , Android und iPhone über ihre Netzwerkschnittstellen eine Verbindung herstellen. Also 3 Hauptclients - 3 API-Schlüssel. Und jeder andere Entwickler könnte auch über eine API-Schnittstelle entwickeln und würde seinen eigenen API-Schlüssel erhalten. API-Aktionen werden basierend auf dem UserLevel-Status akzeptiert / abgelehnt. Wenn ich ein Administrator bin, kann ich alles löschen usw. Alle anderen können nur ihre lokalen (Konto-) Daten bearbeiten.
Erstens, Autorisierung - sollte ich oAuth + xAuth oder meine eigene Implementierung verwenden (siehe http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/RESTAuthentication.html?r=9197 )? Soweit ich weiß, ist der Benutzer des Amazon-Dienstes == API-Benutzer (API-Schlüssel haben) . In meinem Dienst muss ich Standardbenutzer / -konten (die auf der Website registriert sind) und Entwicklerkonten (die ihren API-Schlüssel haben sollten) trennen.
Ich müsste also zuerst den API-Schlüssel autorisieren und dann den Benutzer selbst authentifizieren . Welches Schema sollte ich für die Benutzerauthentifizierung verwenden, wenn ich das Amazon-Schema verwende, um die API-Schlüssel der Entwickler zu überprüfen (deren App zu autorisieren)?
Ich habe gelesen, wie ich ein Token erhalten kann, api.example.org/auth
nachdem ich (über HTTPS , HTTP Basic) meinen Benutzernamen und mein Passwort veröffentlicht und es dann bei jeder folgenden Anfrage weitergeleitet habe. Wie verwalte ich Token, wenn ich gleichzeitig auf Android und einer Website angemeldet bin ? Was ist mit Man-in-the-Middle-Attacke, wenn ich SSL nur auf erste Anfrage (wenn Benutzername und Passwort übertragen werden) und nur HTTP auf jedem anderen verwende? Ist das nicht ein Problem in diesem Beispiel ? Kennwort zum Schutz eines REST-Dienstes?