2010-10-05 24 views
7

Pracuję nad interfejsem API REST, który będzie używany przez programistów piszących aplikacje mobilne. Użytkownicy będą mogli korzystać z usług stron trzecich (Google, Twitter itp.) W celu uwierzytelnienia się, jest to obsługiwane głównie przez OAuth (w zależności od usługi). Używamy dwuetapowej autoryzacji OAuth między aplikacją kliencką a serwerem API (gdzie klucz/klucz klienta jest aplikacją specyficzną dla aplikacji, programista otrzymuje ją z naszej witryny, gdy aplikacja jest tam zarejestrowana).Jak zaimplementować bezpaństwowy interfejs REST API

Mój problem polega na tym, jak postępować, aby śledzić uwierzytelnianie użytkownika w sposób bezpaństwowy. Nie mam danych logowania użytkowników, aby wysyłać w każdym żądaniu. Mogłem utworzyć unikalny identyfikator sesji, gdy użytkownik loguje się, a następnie wymaga tego w każdym żądaniu do interfejsu API REST. Czy są jakieś inne rozwiązania mojego problemu? Czy użycie unikalnego identyfikatora sesji identyfikującego użytkownika powoduje problemy z bezpaństwową perspektywą API REST?

+2

Wciąż trawię ten dobry artykuł Johna Wilandera. Być może to może ci pomóc. http://appsandsecurity.blogspot.com/2011/04/rest-and-stateless-session-ids.html – RayLuo

Odpowiedz

10

Nota prawna: Nie jestem ekspertem od zabezpieczeń.

Nie nazywaj tego usługą session_Id. Nazwij go tokenem uwierzytelniającym i przekaż mu nagłówek HTTP autoryzacji z użyciem własnego schematu uwierzytelniania. Przykładem jest Google AuthSub.

Nie używaj tokenu uwierzytelniania do celów innych niż identyfikacja użytkownika i ustalenie, czy jest on upoważniony do wykonania żądania. Nie przypisuj żadnego stanu do tokena i nie pobieraj na jego podstawie preferencji użytkownika.

+0

Dzięki za dane wejściowe – Andreas

+1

Wystarczy, że zweryfikuję moje zrozumienie tego, token sesji wciąż wymaga stanu sesji po stronie serwera ? To znaczy, czas życia sesji jest zarządzany przez serwer, a token traci ważność po przekroczeniu limitu czasu sesji po stronie serwera? Szukam sposobu na osiągnięcie podobnego celu bez posiadania koncepcji "sesji" na serwerze. – Aron

+1

Jest to również to, czego naprawdę nie rozumiem. Wszyscy mówią o bezpieczeństwie i bezpaństwowości, ale sesja dla użytkownika musi i tak odbywać się na serwerze. – Gambo

Powiązane problemy