【发布时间】:2015-11-20 05:33:07
【问题描述】:
我为 Excel 编写了一个 VBA 插件,它为服务器提供登录/注销功能。
我实现它的方式是向服务器上的 URL 发送请求,该 URL 检查用户是否有会话,如果没有,服务器会在标头响应中发送 401(未经授权)。 401 响应使 Excel 自动弹出“windows 样式”登录模式(我猜这与 Excel 一起免费提供)。我输入我的凭据,服务器对用户进行身份验证,并创建了一个会话。
我现在的问题是当我尝试注销时。服务器按预期销毁会话。如果用户现在再次单击登录,Excel 会向服务器发送 HEAD 请求,服务器会以 401 响应,然后 Excel 会自动发送用户之前输入的相同用户名和密码凭据。用户现在再次登录。需要明确一点 - 这不是服务器端缓存,这是 Excel 在收到 401 响应后使用 HTTP 标头中的基本身份验证重新发送登录凭据。
这不是预期的行为,我不希望 Excel 存储凭据的副本,并一次又一次地重复使用它们。如果用户注销,我希望这是永久的,直到他们决定再次登录,此时他们应该重新输入他们的凭据。
我遇到的问题是告诉 Excel/Windows/VBA?清除它保存的任何东西,无论它保存在哪里。我的问题是,我真的不知道 Excel/VBA 方面的编排是什么,它的功能似乎是免费提供的,所以我不知道它存储在哪里。
不管怎样,这是我的 VBA
Dim req As MSXML2.XMLHTTP60
Set req = New MSXML2.XMLHTTP60
req.Open "GET", url, False
req.send
【问题讨论】:
-
该请求代码中没有凭据?
-
没有。用户在弹出的“Windows 安全”模式中填写详细信息后,Excel 会自动将它们放入 HTTP 身份验证标头中。当 Excel 收到 401 响应时,此模式“免费”提供。此模式上有一个“记住我的凭据”复选框,我没有选中。
-
好吧,我明白你的意思了。我不认为这实际上是 Excel - 我认为这是一个系统事件,而不是应用程序事件,所以我认为您不会通过 VBA 找到答案。 AFAIK Excel 没有存储凭据的功能,这是由操作系统处理的。
-
是的,我也不确定它是 Excel,更像是 Windows。如果我关闭 Excel 并重新打开,凭据将丢失。我希望我能以某种方式使用 VBA 手动清除它。不向用户提供此 Windows 身份验证功能,而不提供清除身份验证凭据的能力,这似乎很荒谬。
-
不久前我在使用 SharePoint 和 VBA 时遇到了类似的事情。可能有一个可以使用的 Windows API,或者可能通过 VBA 使用 Windows 命令行?对不起,我不能提供更多帮助! :)
标签: vba excel session authentication