我想构建一个excel vba插件,可以从目前受SAML身份验证保护的Intranet网站下载excel文件。
如果我尝试使用Internet Explorer或Google Chrome下载该文件,该文件会自动开始下载而不会添加任何凭据,我认为这是因为这些浏览器依赖某种集成的Windows身份验证。
如果我尝试使用诸如winhttp.winhttprequest.5.1之类的VBA对象下载,我会得到一些html页面,我认为它正在启动SAML身份验证(所以我假设我使用的winhttp.winhttprequest.5.1对象不支持SAML身份验证)。
有没有简单的方法可以使用VBA进行SAML身份验证,还是必须手动编写身份验证步骤?
答案 0 :(得分:2)
问题在于,虽然随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。