Я разрабатываю REST API, требующий аутентификации. Поскольку сама аутентификация происходит через внешний веб-сервис по HTTP, я решил, что мы будем выдавать токены, чтобы избежать повторного вызова службы аутентификации. Это подводит меня к моему первому вопросу:
Действительно ли это лучше, чем просто требовать от клиентов использовать HTTP Basic Auth для каждого запроса и кешировать вызовы на стороне сервера службы аутентификации?
Преимущество решения Basic 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, из которого, я полагаю, оно может быть извлечено, предлагает ли это вообще что-либо, кроме ложного чувства безопасности?