2017-04-03 3 views
0

J'ai développé une application MVC, qui, aux fins de cette seule question a un contrôleur:En utilisant une API MVC avec l'authentification Windows à partir de VBA

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

L'application doit être utilisé sur un réseau Intranet, donc, je l'ai mis à « l'authentification Windows »

Le but est d'interroger cette application, par 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) 

Si je lance l'application localement (. Par exemple débogage sur l'ordinateur qui exécute Excel), il fonctionne grâce à Chrome (accès à localhost: xxxxx/api/name retourne un fichier xml avec mon nom d'utilisateur ActiveDirectory).

Les travaux de routine VBA bien ainsi, et la fenêtre de sortie affiche le code XML que je reçois dans Chrome.

Maintenant, si je publie le projet sur le serveur IIS, il fonctionne toujours via Chrome (l'accès à myserver/api/nom renvoie un fichier xml avec mon nom d'utilisateur ActiveDirectory). Cependant, quand je lance le module VBA, il renvoie une erreur 401:

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

Le fait que cela fonctionne dans les navigateurs me porte à croire que la configuration côté serveur est OK, et que je dois modifier quelque chose dans mon VBA.

Je dois admettre que je suis un peu désemparés à ce point ... Merci pour tout vous conduit peut me donner :)

+1

vous devez utiliser la bibliothèque 'WinHTTPRequest.5.1', cela vous permettra d'ajuster les paramètres d'authentification vous permettant de vous connecter – SWa

Répondre

0

Merci aux commentaires @SWa, je résolu ce problème avec un tweak mineur la fonction: le passage à WinHttpRequest et en utilisant 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)