Я бы в целом согласился с комментарием sinelaw, что такие проверки обычно лучше на стороне сервера, чтобы избежать именно той проблемы, с которой вы сталкиваетесь (поддержка нескольких типов клиентов). Тем не менее, вы можете просто не иметь возможности перемещать логику, и в этом случае вам нужно что-то делать.
Для меня ваши варианты:
Сертификаты на стороне клиента, как вы предлагаете - вы в основном подтверждаете, что клиент - это тот, кем (или чем, в вашем случае) вы ожидаете. Я работал с ними раньше, и конфигурация взаимной аутентификации может сбивать с толку. Я не стал бы беспокоиться о производительности, так как думаю, что первым шагом будет получение желаемого поведения (прежде всего правильности). Как бы то ни было, в общем, хотя эта опция возможна, ее установка может быть изнурительной, в зависимости от вашего веб-контейнера.
Настраиваемый заголовок HTTP в вашем настольном приложении, проверка его существования / значения на стороне сервера или просто использование существующего заголовка User-Agent. Поскольку вы шифруете трафик, вы не сможете легко увидеть отправляемый вами HTTP-заголовок, поэтому вы можете установить его имя и значение по своему усмотрению. Проверка на стороне сервера сродни заверению вас, что клиент, отправляющий запрос, почти наверняка использует ваше настольное приложение.
Я бы лично пошел по специальному маршруту заголовка. Возможно, он не идеален на 100%, но если вы заинтересованы в том, чтобы совершал простейшую возможную вещь, чтобы уменьшить риск , он кажется мне лучшим маршрутом. Это не лучший вариант, если вы не используете HTTPS (потому что тогда любой может увидеть заголовок, если он щелкнет по снифферу), но, учитывая, что вы используете HTTPS, он должен работать нормально.
Кстати, я думаю, что вы можете запутать несколько вещей - HTTPS предоставит вам шифрование, но не обязательно включает (клиентскую) аутентификацию. Это две разные вещи, хотя они часто связаны вместе. Я предполагаю, что вы используете HTTPS с аутентификацией реального пользователя (обычная аутентификация или что-то еще).