windows - 使用 VBA 从具有 SAML 身份验证的网站下载文件

标签 windows vba excel authentication saml

我想构建一个 excel vba 插件,能够从当前受 SAML 身份验证保护的内联网网站下载 excel 文件。

如果我尝试使用 Internet Explorer 或 Google Chrome 下载文件,文件会自动开始下载而无需输入任何凭据,我认为这是因为这些浏览器依赖于某种集成的 Windows 身份验证。

如果我尝试使用 winhttp.winhttprequest.5.1 等 VBA 对象进行下载,我会得到一些 html 页面,我认为它正在启动 SAML 身份验证(所以我假设我使用的 winhttp.winhttprequest.5.1 对象不支持SAML 身份验证)。

是否有任何简单的方法可以使用 VBA 进行 SAML 身份验证,或者我是否必须手动编写身份验证步骤代码?

最佳答案

问题是,虽然随 Windows/Office 分发的各种库会为您管理 HTTP 和 SSL,但要找到一个执行 SAML 的库并不容易。 .NET 有 Windows Communication Foundation (WCF),可以在 VBA 中使用,但我不知道它如何与网站一起工作。

如果您不能让 WCF 为您执行 SAML,最简单的方法可能是自动化 Internet Explorer,因为 Internet Explorer 已经包含 SAML 功能。不幸的是,在 Internet Explorer 中难以自动化的一件事是下载文件,特别是如果您不希望在用户屏幕上弹出的内容。

您需要使用 Windows API 以编程方式与 Internet Explorer 的“另存为”对话框交互,同时将其隐藏。以下文章介绍了如何执行此操作:http://www.codeproject.com/Articles/2847/Automated-IE-SaveAs-MHTML 本文使用 C++,但您可以从 VBA 进行相同的 API 调用。

我想这是弄清楚服务器使用的是哪种 SAML,然后决定哪个更容易:(a) 自动化 Internet Explorer 或 (b) 编写您自己的 SAML 客户端。

如果您打算编写自己的 SAML 客户端,则可以使用 MSXML 来使用和生成所需的 XML 并编码/解码 base64。

关于windows - 使用 VBA 从具有 SAML 身份验证的网站下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26841051/

相关文章:

vba - 遍历多个命名范围并转到类似的命名范围 VBA

excel - excel如何解释数组

PHP mkdir()、chmod() 和 Windows

vba - 我可以在 Excel VBA 中将一列转置为带空格的行吗?

c++ - 在 Mac 上编写 C(和变体),并导出到 Mac 和 Windows

excel - 修改 Excel VBA 程序 - 清除列中的单元格

vba - 以编程方式添加和安装 Excel 加载项时,该加载项保存在哪里?

excel - vba 关心自动过滤器吗?

windows - 在 WiX 中禁用 WIN64DUALFOLDERS 替换

windows - psql shell 使用代码页 850,windows 使用 1252。如何解决更改控制台代码页?