2013-04-07 11 views
12

Mam prosty REST API (używając Slim ramy), ustanowiony w którym użytkownik może wezwać stronę tak:API Tajny Klient z REST Korzystanie Slim Framework

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

pobierać i wyświetlać kilka prostych danych JSON .

Chcę dodać do tego uwierzytelnienie, aby dostęp do tych danych mieli tylko użytkownicy posiadający pewien identyfikator klienta (co najmniej). Chciałbym, aby użytkownik mógł podać w swoim adresie URL informacje o tajnych/tajnych klientach, ale chcę to zrobić bez zbytniego rzeźbienia struktury REST.

Czy istnieje pewna struktura lub biblioteka, która byłaby szczególnie skuteczna do osiągnięcia tego celu?

+0

Niektóre usługi wymagają API wysyłać rzeczy jak client_id w nagłówku żądania. Użytkownicy mogą używać cURL do dodawania niestandardowych nagłówków do ich żądań, do których następnie można uzyskać dostęp za pomocą skryptu. – Xeoncross

Odpowiedz

8

Ja też miałem ten problem przez jakiś czas, mam też pytanie bez odpowiedzi na ten temat (tutaj na ten temat).

Zasadniczo masz do wyboru OAuth lub coś niestandardowego.

Teraz, oauth, pracują nad wersją 2.0 i nie powinieneś rozpoczynać nowego projektu z wykorzystaniem OAuth 1, ale chodzi o to, że oauth2 jest daleki od ukończenia i jest mało wsparcia dla serwera oauth2 dla php teraz. Nie chcę powiedzieć, że oauth2 2-legged/3-legged jest skomplikowany, ale jest więcej niż powinien, a także po przeczytaniu wielu postów dotyczących tego, zdecydowałem, że na razie powinienem iść z czymś innym , nie oauth (także, jeden z twórców oautha opuścił projekt, ponieważ nie był usatysfakcjonowany kierunkiem tego projektu), ponieważ jest w stanie "niezdecydowanym" (oczywiście ludzie będą twierdzić, że jest on prawie gotowy do użycia, ale nie obchodzi mnie, chcę czegoś już udowodnić, nie chcę być szczurem laboratoryjnym dla wielkich firm, aby przetestować oauth [tak, oauth idzie na wielkie firmy, a nie twoje).

Wracając do mojego numeru, zawsze podobał mi się sposób, w jaki Amazon działa z api, jest tak prosty w implementacji, więc dlaczego nie pójść w tym samym kierunku? Mam na myśli to, że Amazon jest jednym z największych dostawców api, jeśli go używają, mają ku temu prawdziwy powód.
Powiedziałem i zrobiłem, w mniej niż 2 godziny miałem uruchomiony mój protokół uwierzytelniania/autoryzacji, i zgadnij co, było to łatwe, proste i lubię je pisać (nie denerwować się z powodu oauth). Dobry artykuł, który pomógł mi zacząć to: http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/, który w zasadzie wyjaśnia, co musisz zrobić.

Więc gdybym był tobą, chciałbym zacząć stamtąd :)

+5

masz zepsuty link –

1

Ponieważ REST jest bezpaństwowcem, musisz go wyrzeźbić, jeśli chcesz różnych reprezentacji danych dla różnych użytkowników (ergo - stanowy), co oznacza, że ​​przy każdym żądaniu będziesz dostarczać dane (o stanie użytkownika), które nie są istotne dla konkretnego podmiotu.

Uwierzytelnij użytkownika za każdym razem, lub tymczasowy plik cookie + sesja, lub jeśli masz zaangażowane strony trzecie, OAuth.

Zobacz także Dave Ingram - API Design presentation

2

Może ten może być przydatny slim HttpBasicAuth

Można użyć HTTP basic auth na życzenie do sprawdzania, czy użytkownik, który zrobić żądanie jest ważne dla użytkownika.

5

Jeśli klienci API nie działają „w imieniu” użytkowników następnie OAuth jest przesada moim zdaniem.

Standardowy klucz interfejsu API, który można wydać, będzie działał. W razie potrzeby możesz również dodać podpis żądania.

jakimś cudem przykładów: here i here

Powiązane problemy