Как обезопасить соединение между клиентом и серверов (RESTful API)?
Прошу помощи у знающих людей, ситуация такая:
Есть сервер на PHP. К этому серверу постоянно обращаются несколько клиентов (2-3 сайта, в дальнейшем больше). Для связи клиент-сервер я выбрал архитектуру REST и у меня сразу возник вопрос, как разрешить обращаться к серверу только проверенным клиентам.
Схема работает следующим образом: я посылаю данные с формы на сервер, сервер проверяет от кого пришли данные и если клиент проверенный, то данные записываются в БД а клиент получает ответ. Подойдёт ли для этой схемы протокол OAuth и какую лучше использовать версию протокола? А может лучше воспользоваться обычной HTTP аутентификацией?
Ещё мне пришёл в голову следующий вариант: на клиенте есть публичный и приватный ключ. Вместе с данными на сервер отправляется хэш данных с приватным ключём. Т.к. сервер знает кто прислал ответ, он сверяет 2 хэша и записывает инфу в бд если хэши совпадают. Есть ли смысл использовать такую защиту?
Вопросов очень много, буду рад вашим мнениям. Большое спасибо.
OAuth подразумивает разграничение доступа и привелегий. Я думаю у вас все клиенты имеют одинаковые права, им ненужно постоянно запрашивать доступ так как они не передвигаются. Я думаю имеет смысл каждому просто сгенерировать хэш и не мучатся. Просто каждый запрос отправлять данный ключ.
Самый главный вопрос - вы же используете HTTPS?
Без него все ваши хеши можно выловить сниффером трафика.
Что подразумевается под клиентом? Браузер напрямую на ваш сервер? Браузер через сервер стороннего сайта на ваш сервер?
Если браузер, то ваши хеши будут в открытом виде. Можно их угнать и завалить ваш API мусором.
Вероятно я не правильно употребил слово клиент. Под клиентом я подразумевал сайты, которые обращаются к серверу (клиент-сервер). ХТТПС само-собой будет. Прошу прощения, у меня в этом деле совершенно нет опыта. Основная задача, чтобы нас не заспамили левыми данными.
AndyMarrel: ну у вас запрос к вашему API откуда идет? Напрямую из браузера сайта, или из браузера отправляется на сервер сайта, и с того сервера к вашему серверу?
AndyMarrel: Выдавайте серверу секретный ключ и вместе с ключом храните диапазон IP-адресов, для которых он валиден + HTTPS само собой. Будет достаточно.