2012-07-16 20 views
10

Tworzę usługę internetową, którą chcę udostępnić jako interfejs REST API, aby programiści mogli tworzyć aplikacje za jej pomocą. Chcę, aby programiści mieli możliwość tworzenia/zarządzania kontami użytkowników i uwierzytelniania za pomocą interfejsu API. Jak sobie z tym poradzić? OAuth czy coś innego?Jak zaimplementować uwierzytelnianie dla interfejsu API REST?

Używam do tego python, flask, mongodb.

Odpowiedz

10

Rozstrzygnęliśmy następujące kwestie, używając OAuth 2 (co jest o wiele lepszym rozwiązaniem niż OAuth 1). W szczególności korzystamy z przepływu resource owner password credentials. W jaki sposób zintegrować go do naszego serwisu relaksującego, oto pomysł:

  • Początkowy zasób, po uderzeniu przez nieuprawnionego użytkownika, zwraca 401. Korpus 401 zawiera pojedynczy link z rel=oauth2-token. (Sposób sygnalizowania linków zależy od rodzaju nośnika, używamy HAL, ale można użyć nawet nagłówka Link).
  • Po uwierzytelnieniu użytkownika, wraca do początkowego zasobu, wysyłając swój nagłówek Authorization na okaziciela token zwrócony z procesu OAuth 2. W tym momencie zwracamy 200, przy wszystkich dostępnych normalnych linkach.

Nie ujawniamy tworzenia kont, ale jeśli chcesz to zrobić, zrobiłbym to z innym linkiem dostępnym dla nieautoryzowanych użytkowników w początkowym zasobie. To łącze ma niestandardową nazwę rel, ponieważ jest specyficzne dla Twojej aplikacji, np. rel=http://rels.myapi.com/users

Dobry projekt RESTful wskazuje, że link do tego rel wskazuje na np. http://myapi.com/users i że konsumenci API wykonują do tego punktu końcowego POST, który zwraca do nich nowy zasób użytkownika z nagłówkiem Location wskazującym nowo utworzony zasób użytkownika na przykład, http://myapi.com/users/username. (Zasoby użytkownika same będą oczywiście inne niż rel, rozróżniając pojedynczy zasób użytkownika od zbioru kolekcji użytkowników mnogich).

Powiązane problemy