Excel VBA: проверка подлинности NTLM / Kerberos и ведение переговоров в VBA-Web / WinHttp

Я хочу взаимодействовать с REST API веб-сайта (в EXCEL VBA), который требует аутентификации, используя либо цифровой сертификат (файл .PFX) (аутентификация NTLM), либо используя аутентификацию домена Windows (Kerberos & Negotiate Authentication). Последнее предпочтительнее, но я не знаю, как это сделать, и я надеялся, что кто-то сможет поделиться кодом о том, как выполнить любую из этих аутентификаций. Я не могу использовать другие методы аутентификации (например, базовые), потому что он не поддерживается.

В настоящее время я использую VBA-Web (github: VBA-tools: VBA-Web), и мне удалось взаимодействовать с api, но очень странным образом. Я отслеживал сетевые звонки с Chrome на веб-сайт и замечал, что он добавляет файлы cookie в заголовок каждого вызова. Поэтому в моих запросах я добавляю:

webrequest.SetHeader "Cookie", "server.com.au=35558896564.55846.54545; SDASESSION=AQISFCwMasdffczd6afASFVHfgfgsdf%2BG35FsE%3D%40AAJTSwAJSDFSDTkMw%3D%3D%23; amlbcookie=07; JSESSIONID=000f:19pcqj2d1; server2.com.au=484566584.454584.41545" 

Тем не менее, это, очевидно, раздражает, а не является удобным для пользователя – поскольку я должен найти файлы cookie каждый раз, когда хочу использовать мой код excel vba.

Кроме того, после отслеживания сетевых вызовов аутентификации в Chrome я заметил, что он проходит через различные перенаправления, собирая все файлы cookie по мере их перенаправления. Во время одного конкретного вызова он выполняет «согласование» аутентификации.

VBA-Web, похоже, основан на WinHTTP, поэтому я огляделся, и я действительно потерялся в том, как взаимодействовать с WinHTTP (или WinINet и т. Д.) Для выполнения этой проверки подлинности. Я просмотрел метод setCredentials ( https://msdn.microsoft.com/en-us/library/windows/desktop/aa384112(v=vs.85).aspx ), но я не уверен, что имя пользователя и пароль будет для NTLM или Negotiate?

В качестве альтернативы, я попытался использовать цифровой сертификат вместо этого, но поскольку у меня есть файл PFX, я не знаю, как его использовать напрямую. Я видел https://msdn.microsoft.com/en-us/library/windows/desktop/aa384055(v=vs.85).aspx, но я не совсем уверен, где хранится мой сертификат после установки PFX , Я выбираю «Личный» во время установки, значит ли это, что он находится в LOCAL_MACHINE \ Personal? Что еще более важно, я не знаю, что такое имя.

Документация Microsoft находится на C ++ или JScript, так что это тоже не помогает.

Поэтому, если я могу пройти аутентификацию и получить файлы cookie, то остальное должно быть в порядке. Как я могу сделать это с помощью любого из двух методов аутентификации в Excel, используя VBA?

PS Надеюсь, мой вопрос ясен. Не стесняйтесь просить разъяснений. Все ответы, которые я нашел, возвращаются к базовой аутентификации, но я не могу этого сделать. Я бы поделился с вами веб-сайтом, с которым я пытаюсь взаимодействовать, но он находится в интрасети.

Interesting Posts

ActiveX ComboBox метод или элемент данных не найден

Поиск определенного строкового формата с использованием VBA и вставка в новый лист excel

Excel Такая же ячейка, как и вход и выход

Ошибка «Подстрока вне диапазона» при попытке изменить цвет текста на основе значений ячеек

Макрос VBA для изменения вертикальной оси в столбчатой ​​диаграмме до минимального и максимального значений в выборе

Excel: замените INDIRECT (), чтобы динамически ссылаться на рабочие листы

Excel VBA: флажок Userform – если отличия синтаксиса Statement

Создание таблицы Excel из CSV (ASP.NET C #)

Выпадающий список Excel добавляет идентификаторы с отображаемым элементом

C # EPPlus – Сортированная вставка данных создает пустой патрон строк

Как настроить заголовок на странице excel с помощью apache POI?

VBA, сохраняющий диапазон в ячейке

динамический выпадающий список – возвращаемое значение

Не удалось закрыть Excel даже после выпуска ресурсов

Поиск местоположений даты в 100K плюс ряд Эффективность таблиц

Давайте будем гением компьютера.