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).