То, что вы просите, невозможно.
По сути, если запросы поступают к вам через общедоступный Интернет, вы не можете узнать личность приложения, отправляющего вам запросы.
Вы можете сделать обоснованное предположение об удаленном клиенте. Но поскольку удаленный клиент работает на платформе, которую вы не можете контролировать, ничто не мешает злоумышленнику проанализировать, как он работает, и затем отправить вам идентичные запросы. Вы не сможете заметить разницу, если атакующий достаточно опытен.
Существуют инструменты, которые могут помочь вам обнаружить и заблокировать вредоносные клиенты, но есть также инструменты для вредоносных клиентов, чтобы избежать обнаружения (просто найдите Переполнение стека, чтобы найти множество примеров обратной проблемы). Это гонка вооружений, и если вы хотите выиграть, вам нужно будет потратить больше времени и денег, чем ваши коллеги с другой стороны.
Обычное решение этой проблемы - сделать это проблемой ваших клиентов. Взимайте их за квоту запросов API и выставляйте им счета, если они делают больше. Затем, если они передают ключ API кому-либо еще, им также необходимо оплатить счет за них. Тогда вам не нужно заботиться о том, чей это ключ API: вам платят в любом случае.
Если вы не можете выставить им счет (например, если это бесплатный сервис), то следующая лучшая вещь - ограничение скорости. Не допускайте, например, более 10 запросов в секунду для одного ключа API.
Если вы серьезно относитесь к такого рода вещам, вы, вероятно, не хотите изобретать велосипед. Существуют облачные сервисы API-шлюзов. Выберите один и используйте его для обработки всех ваших аутентификаций ключей API и регулирования клиентов.