В моей организации используется ряд служб, предоставляющих интерфейсы REST. Запросы POST, PUT или DELETE к такому интерфейсу могут быть разрушительными. Используя брандмауэры и аутентификацию пользователей, мы можем ограничить доступ авторизованным персоналом. Я хотел бы пойти еще дальше и потребовать одобрения от двух человек, прежде чем запрос будет обработан сервером приложений.
Есть ли обратный прокси-сервер, который я могу использовать между пользователем (ами) и сервером приложений, чтобы любой запрос GET немедленно перенаправлялся на сервер приложений. Однако любой запрос POST или PUT откладывается до утверждения на интерактивной веб-странице. (Рассматриваемые запросы обычно содержат тело JSON, а URL-адрес и HTTP-команда достаточно описательны.)
Итак, если Алиса
curl -XDELETE https://some.api/important/resource,
это не будет иметь эффекта, пока Боб не откроет веб-браузер и явно не подтвердит его. Алиса может использовать сценарий для выполнения операции, но Боб должен присутствовать в браузере и проверять запрос.
Во-первых, это очень похоже на попытку использовать технологии для решения нетехнической проблемы, от которой я всегда устал.
Тем не менее, я не могу представить себе какое-либо готовое / готовое программное обеспечение, которое будет делать это, поскольку это немного странное, если не в некотором роде, обоснованное требование.
Однако вы можете перехватывать запросы с помощью методов, вызывающих озабоченность, и направлять их в сценарий, который затем сохраняет их где-нибудь (SQL, файл, Redis и т. Д.). Эти запросы должны, вероятно, возвращать общий объект JSON, в котором говорится, что их запрос был поставлен в очередь для утверждения, чтобы пользователи не думали, что они потерпели неудачу.
Затем администратор (-и) загружает (-я) другую страницу (-и) со списком очереди запросов и утверждает их по мере необходимости. Утвержденные запросы могут быть немедленно повторно отправлены сеансом Боба, или они могут быть отправлены рабочему процессу, который выполняет их в фоновом режиме.
Вы можете сделать это в Apache. Что-то вроде (запись по памяти) должно делать это:
<Location /api>
AuthType Basic
AuthName "API authentication"
AuthUserFile /path/to/htusers
AuthGroupFile /path/to/htgroups
Require valid-user
# Write user group
<Limit DELETE>
Require group superusers
</Limit>
</Location>
Это позволит любому пользователю в вашем файле htusers запускать GET, POST, PUT и т. Д. Однако DELETE будет ограничено для всех в группе "суперпользователей".