API Server принимает все API-запросы от внешних приложений. Для проверки подлинности пользователей, API Server использует систему аутентификации, аналогичную системе шифрования открытым ключом (public-key encryption).
Криптографическая система с открытым ключом (или асимметричное шифрование, асимметричный шифр) — система шифрования и/или электронной цифровой подписи (ЭЦП), при которой открытый ключ передаётся по открытому (то есть незащищённому, доступному для наблюдения) каналу и используется для проверки ЭЦП и для шифрования сообщения. Для генерации ЭЦП и для расшифровки сообщения используется секретный ключ.
Все запросы к API Server осуществляются на файл фронт-контроллера. Именно в этом файле происходит идентификация открытого и секретного ключей.
Вот пошаговое описание этого процесса:
- На сервер по адресу расположения файла фронт-контроллера приходит запрос от API клиента. В запросе содержатся APP ID (открытый ключ клиента) и APP KEY (32-символьная, шифрованная с помощью секретного ключа клиента строка). Секретный ключ никогда не отправляется на сервер, он используется только для шифрования запроса. В запросе содержатся параметры вызова сервера – пользователь, пароль доступа, название контроллера и действия, которое должно обработать вызов клиента. Например, массив параметров может выглядеть так:
$items = array(
'controller' => 'todo',
'action' => 'read',
'username' => $username,
'userpass' => $userpass
);
- Когда на API Server приходит запрос, сервер проверяет список приложений на наличие открытого ключа (APP ID);
- Если открытый ключ не найден – выбрасывается исключение типа «Request is not valid». Если ключ имеется, сервер берет секретный ключ, который соответствует этому открытому ключу, и пытается расшифровать пришедший запрос;
- Если расшифровка была успешной, из пришедшего запроса вытягиваются и обрабатываются параметры controller и action. Фронт-контроллер, который обрабатывает запрос, подключает нужный файл контроллера и вызывает действие, содержащееся в параметре action;
- В случае успеха/неудачи обработки запроса клиент получает ответ от API Server.