我想与需要身份验证的网站(在 EXCEL VBA 中)的 REST API 交互,使用数字证书(.PFX
文件)(NTLM 身份验证)或使用 Windows 域身份验证(Kerberos 和协商身份验证)。后者是首选,但我也不知道该怎么做,我希望有人可以分享如何进行这些身份验证的代码。我不能使用其他身份验证方法(例如基本),因为它不受支持。
目前我正在使用 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"
但是,这显然很烦人而且对用户不友好——因为每次我想使用我的 excel vba 代码时都必须找到 cookie。
此外,在跟踪 Chrome 中身份验证的网络调用后,我注意到它会经历各种重定向,并在重定向时收集所有 cookie。在一次特定调用期间,它会进行"negotiate"
身份验证。
VBA-Web 似乎是基于的WinHTTP
,所以我环顾四周,我真的迷失了如何与WinHTTP
(或 WinINet 等)交互来进行这些身份验证。我查看了setCredentials
方法Link,但我不确定 NTLM 或 Negotiate 的用户名和密码是什么?
或者,我尝试使用数字证书,但由于我有一个 PFX 文件,我不知道如何直接使用它。我看过Link,但我不完全确定安装 PFX 后我的证书存储在哪里。我在安装过程中选择 Personal ,这是否意味着它在 LOCAL_MACHINE\Personal 中?更重要的是我不知道主题名称是什么。
Microsoft 文档在C++
或中JScript
,所以这对我也没有帮助。
因此,如果我能够进行身份验证并获取 cookie,那么其余的应该没问题。我将如何使用 VBA 在 Excel 中使用两种身份验证方法中的任何一种来执行此操作?
PS我希望我的问题很清楚。随时要求澄清。我找到的所有答案都恢复为基本身份验证,但我不能这样做。我将与您分享我尝试与之交互的网站,但它位于 Intranet 上。