Tworzę REST API, które wymaga uwierzytelnienia. Ponieważ samo uwierzytelnianie odbywa się za pośrednictwem zewnętrznej usługi sieciowej za pośrednictwem protokołu HTTP, doszedłem do wniosku, że będziemy wydawać tokeny, aby uniknąć wielokrotnego wywoływania usługi uwierzytelniania. Co prowadzi mnie zgrabnie do mojego pierwszego pytania:
Czy to naprawdę lepsze niż wymaganie od klientów używania podstawowego uwierzytelniania HTTP przy każdym żądaniu i buforowanie wywołań po stronie serwera usługi uwierzytelniania?
Zaletą rozwiązania Basic Auth jest to, że nie wymaga pełnej podróży w obie strony do serwera przed rozpoczęciem żądań treści. Tokeny mogą potencjalnie mieć bardziej elastyczny zakres (tj. Przyznawać prawa tylko do określonych zasobów lub akcji), ale wydaje się to bardziej odpowiednie w kontekście OAuth niż mój prostszy przypadek użycia.
Obecnie tokeny są pozyskiwane w następujący sposób:
curl -X POST localhost/token --data "api_key=81169d80...
&verifier=2f5ae51a...
×tamp=1234567
&user=foo
&pass=bar"
Plik api_key
, timestamp
I verifier
są wymagane przez wszystkich żądań. „Weryfikator” jest zwracany przez:
sha1(timestamp + api_key + shared_secret)
Moim zamiarem jest zezwalanie na połączenia tylko od znanych osób i zapobieganie wielokrotnemu używaniu połączeń.
Czy to wystarczy? Underkill? Overkill?
Z tokenem w ręku klienci mogą pozyskiwać zasoby:
curl localhost/posts?api_key=81169d80...
&verifier=81169d80...
&token=9fUyas64...
×tamp=1234567
Dla najprostszego możliwego połączenia wydaje się to okropnie rozwlekłe. Biorąc pod uwagę, że shared_secret
testament zostanie osadzony (przynajmniej) w aplikacji na iOS, z której zakładam, że można ją wyodrębnić, czy oferuje to w ogóle coś poza fałszywym poczuciem bezpieczeństwa?