2017-04-03 61 views
0

我公司开发的MVC应用程序,其中,对于这个问题的目的只有一个控制器:使用的MVC API使用Windows身份验证从VBA

Public Function GetValue() 
    Return User.Identity.Name 
End Function 

的应用是一个Intranet网络上使用,因此,我已将其设置为'Windows身份验证'

其目的是通过VBA查询此应用程序。

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP") 
With objHTTP 
    .Open "GET", URL, False 
    .setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" 
    .setRequestHeader "Content-type", "application/json" 
    .setRequestHeader "data-type", "json" 
    .send 
    .WaitForResponse 
    sResult = .ResponseText 
End With 
Debug.Print (sResult) 

如果我在本地运行的应用程序(即调试运行Excel的计算机上),它是通过浏览器(访问本地主机:XXXXX/API /名返回的XML文件,我的ActiveDirectory用户名)。

VBA例程也正常工作,Output窗口显示我在Chrome中获得的XML。

现在,如果我将项目发布到IIS服务器,它仍然可以通过Chrome(通过访问myserver/api/name返回带有ActiveDirectory用户名的xml文件)工作。 然而,当我运行VBA模块,它返回一个错误401:

Error:401 - Unauthorized: Access is denied due to invalid credentials. 

,它工作在浏览器使我相信,服务器端的配置是OK,那我需要调整的东西的事实我的VBA。

我不得不承认,我是一个有点无能在这一点上... 谢谢你的任何导致你可以给我:)

+1

你应该使用'WinHTTPRequest.5.1'库,这将允许您调整身份验证设置允许您登录 – SWa

回答

0

感谢@SWa评论,我解决了这个有小调整,以功能:切换到WinHttpRequest和使用setAutoLogonPolicy 0

Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1") 
With objHTTP 
    .Open "GET", URL, False 
    .setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" 
    .setRequestHeader "Content-type", "application/json" 
    .setRequestHeader "data-type", "json" 
    .setAutoLogonPolicy 0 
    .send 
    .WaitForResponse 
    sResult = .ResponseText 
End With 
Debug.Print (sResult)