ключи API могут быть использованы для контроля скорости запроса, если они видны. Это означает, что вы не допустите больше N запросов в минуту за ключ за ip или что-то в этом роде. Они на самом деле не средство безопасности, а идентичность.
Теперь, как вы собираетесь убедиться, что этот ключ фактически используется пользователем, которому он принадлежит?
Один из способов сделать это подпись запроса. когда вы передаете запрос с кучей параметров (a = x & b = y ...), вы создаете подпись только для клиента, и сервер может создавать или проверять. это делается путем ввода параметров и значений и создания суммы MD5 или SHA1, добавляя в строку секретную переменную или соль. эта переменная никогда не отправляется на провод и видна пользователю только консолью администратора только по HTTPS. Однако не забудьте отсортировать параметры в алфавитном порядке перед хэшированием!
так, если мои параметры: foo=bar&bar=baz
, я сортирую словарь параметров, добавьте секретный $SECRET='asd32efe32ef2df23'
и создать: $sig = md5('bar=baz&foo=bar'.$SECRET);
то можно просто добавить &sig={$sig}
к запросу. другая сторона сделает то же самое с параметрами (исключая sig
) и проверит его.
Хорошей идеей было бы изменить секрет за сеанс или каждый раз в то время. это можно сделать через HTTPS, используя пароль или сертификат SSL.
Редактировать: одна вещь, которую вы обычно добавляете, чтобы сделать ее более безопасной, представляет собой инкрементирующий идентификатор запроса, который также отправляется незашифрованным по проводу и используется в процессе хэширования. это предотвращает наличие двух одинаковых запросов от одной и той же сигнатуры и предотвращает повторную атаку (злоумышленник повторно передает команду). Когда вы это делаете, вам нужно разрешить некоторую грацию на сервере для запросов без заказов (т. Е. Клиент отправил их по заказу, но из-за скорости сети вы можете увидеть их как 100, 102, 101 на сервере).
Возможный дубликат [Как обработать авторизацию API, написанную на PHP] (http://stackoverflow.com/questions/7830970/how-do-i-handle-authorization-to-an-api-written- in-php) – deceze