如何告诉Excel/VBA清除安全凭据?

3
我已经为Excel编写了一个VBA插件,它提供了与服务器的登录/注销功能。我实现的方式是向服务器上的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

该请求代码中没有凭据? - SierraOscar
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Agent96
啊,好的,我现在明白你的意思了。我认为这不是Excel,而是一个系统事件,而不是应用程序事件,所以我认为你不会通过VBA找到答案。据我所知,Excel没有存储凭据的功能,这由操作系统处理。 - SierraOscar
是的,我也不确定它是否属于Excel,更像是一个Windows的东西。如果我关闭并重新打开Excel,那么凭证就丢失了。我希望能够通过VBA手动清除这些凭证。不提供清除认证凭据的功能,而只提供Windows身份验证功能,似乎有些荒谬。 - Agent96
我不久前在使用SharePoint和VBA时也遇到了类似的问题。可能有一个可以使用的Windows API,或者通过VBA使用Windows命令行?很抱歉我不能提供更多帮助! :) - SierraOscar
1个回答

0

来自这个答案

myURL = "http://my.domain.com/myscript.cgi"
Dim oHttp As New MSXML2.XMLHTTP
oHttp.Open "POST", myURL, False
oHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded'"
oHttp.setRequestHeader(“Cache-Control”, “no-cache”);
oHttp.setRequestHeader(“Pragma”, “no-cache”);
oHttp.setRequestHeader(“If-Modified-Since”, “Sat, 1 Jan 2000 00:00:00 GMT”);
oHttp.setRequestHeader "Authorization","Basic " & Base64EncodedUsernamePassword
oHttp.send "PostArg1=PostArg1Value"
Result = oHttp.responseText

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接