2013-04-07 6 views
12

Ich habe eine einfache REST-API (unter Verwendung des Slim-Framework) eingerichtet, in dem der Benutzer eine Seite wie folgt aufrufen können:API Client Geheimnis mit REST verwenden Schlanke Rahmen

subdomain.domain.com/api/musician/id/3273 

abzurufen und einige einfache JSON-Daten anzeigen .

Ich möchte eine Authentifizierung hinzufügen, damit nur Benutzer mit einer bestimmten Client-ID (mindestens) auf diese Daten zugreifen können. Ich möchte, dass der Benutzer in der Lage ist, seine Client-Geheim-/ID-Informationen in die URL einzubringen, aber ich möchte dies abziehen, ohne die REST-Struktur zu sehr abzuschaffen.

Gibt es ein bestimmtes Framework oder eine Bibliothek, die besonders effektiv dafür sind?

+0

Einige API-Dienste benötigen Sie Dinge wie ein client_id im Header der Anforderung senden. Ihre Benutzer können mit cURL ihren Anfragen benutzerdefinierte Header hinzufügen, auf die Sie dann in Ihrem Skript zugreifen können. – Xeoncross

Antwort

8

Ich auch, hatte dieses Problem für eine Weile, ich habe auch eine Frage ohne Antwort zu diesem Thema (hier auf so).

Grundsätzlich sind Ihre Optionen OAuth oder etwas Brauchbares.

Jetzt, für oauth, arbeiten sie an Version 2.0 und Sie sollten kein neues Projekt mit OAuth 1 starten, aber die Sache ist, dass oauth2 noch lange nicht fertig ist und es wenig Unterstützung für einen oauth2 Server gibt php gerade jetzt. Ich möchte nicht sagen, dass oauth2 2-legged/3-legged komplex ist, aber es ist mehr als es sein sollte und auch nachdem ich viele Beiträge dazu gelesen habe, entschied ich, dass ich jetzt mit etwas anderem gehen sollte , nicht oauth (auch einer der oauth-Schöpfer hat das Projekt verlassen, weil er mit der Richtung, in die dieses Projekt geht, nicht zufrieden war), weil es sich in einem "unentschiedenen" Zustand befindet (natürlich werden die Leute argumentieren, dass es so ziemlich fertig ist), aber ich interessiere mich nicht, ich will etwas, das bereits bewiesen ist, will nicht eine Laborratte für riesige Unternehmen sein, um oauth zu testen [ja, oauth geht für riesige Firmeninteressen, nicht deins]).

Wie auch immer, zurück zu meinem Problem, ich mochte immer die Art, wie Amazon mit ihrer API arbeitet, es ist so einfach zu implementieren, also warum nicht in die gleiche Richtung gehen? Ich meine, Amazon ist einer der größten API-Anbieter da draußen, wenn sie es verwenden, haben sie einen echten Grund, dies zu tun.
Gesagt und getan, in weniger als 2 Stunden hatte ich meine Authentifizierung/Authorisierung-Protokoll-up-and-running, und rate mal, es war einfach, einfach und ich genieße es zu schreiben (nicht frustriert wegen oauth). Ein guter Artikel, der mir geholfen hat, war das: http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/ was im Grunde erklärt, was Sie tun müssen.

Also, wenn ich Sie wäre, würde ich von dort aus starten :)

+5

Sie haben einen defekten Link –

1

Da REST zustandslos ist, müssen Sie es praktisch metzeln, wenn Sie unterschiedliche Datendarstellungen für verschiedene Benutzer wünschen (ergo - stateful), was bedeutet, dass Sie bei jeder Anfrage Daten (über den Benutzerstatus) bereitstellen, die nicht relevant sind für bestimmte Entität.

So authentifizieren Sie Benutzer jedes Mal, oder temporäre Cookie + Sitzung, oder, wenn Sie Dritte beteiligt sind, OAuth.

Siehe Dave Ingram - API Design presentation

2

auch Vielleicht kann dies nützlich sein slim HttpBasicAuth

Sie HTTP Basic Auth pro Anfrage zur Validierung verwenden können, wenn der Benutzer, der die Anforderung tun ein gültiger Benutzer ist.

5

Wenn Ihr API-Clients nicht „im Auftrag von“ Benutzern handelt dann OAuth ist übertrieben meiner Meinung nach.

Ein Standard-API-Schlüssel, den Sie ausgeben können, funktioniert. Sie können bei Bedarf auch eine Anforderungssignatur hinzufügen.

Einige dünne Beispiele: here und here