Я разрабатываю REST API, требующий аутентификации. Поскольку сама аутентификация происходит через внешний веб-сервис через HTTP, я решил, что мы будем раздавать токены, чтобы избежать неоднократного вызова службы проверки подлинности. Это подводит меня к моему первому вопросу:
Неужели это действительно лучше, чем просто требовать от клиентов использовать HTTP Basic Auth для каждого запроса и кэшировать вызовы на сервер проверки подлинности?
Основное решение Auth имеет то преимущество, что не требует полного обратного перехода к серверу до того, как начнутся запросы на контент. Токены потенциально могут быть более гибкими по охвату (т.е. Предоставлять только права на определенные ресурсы или действия), но это представляется более подходящим для контекста OAuth, чем мой более простой вариант использования.
В настоящее время токены приобретаются следующим образом:
curl -X POST localhost/token --data "api_key=81169d80...
&verifier=2f5ae51a...
×tamp=1234567
&user=foo
&pass=bar"
Для всех запросов требуются api_key
, timestamp
и verifier
. "Верификатор" возвращается:
sha1(timestamp + api_key + shared_secret)
Мое намерение состоит только в том, чтобы разрешать вызовы от известных сторон и предотвращать повторное использование вызовов.
Это достаточно хорошо? Underkill? Overkill?
С помощью токена в руках клиенты могут приобретать ресурсы:
curl localhost/posts?api_key=81169d80...
&verifier=81169d80...
&token=9fUyas64...
×tamp=1234567
Для простейшего вызова это кажется довольно ужасным. Учитывая, что shared_secret
завершит внедрение (как минимум) приложения iOS, из которого я бы предположил, что он может быть извлечен, это даже предложение чего-либо, кроме ложного смысла безопасности?