2017-05-19 1 views
1

J'ai un problème avec l'authentification NTLM sur Web Api hébergé par Owin. NTLM est activé côté serveur et côté client. Dans le client, j'utilise RestSharp.L'authentification RestSharp et NTLM ne fonctionne pas si j'accède à l'API via le nom d'hôte

client

_client = new RestClient(ConfigurationManager.AppSettings["UserAccessApi"]); 
_client.Timeout = 5000; 
_client.Authenticator = new NtlmAuthenticator(); 

service

var listener = 
(System.Net.HttpListener)app.Properties["System.Net.HttpListener"]; 
listener.AuthenticationSchemes = System.Net.AuthenticationSchemes.IntegratedWindowsAuthentication; 

app.UseWebApi(config); 

Si j'accéder à cette API via un navigateur IP ou Chrome il fonctionne, alors que si l'accès à travers le nom d'hôte ou Internet Explorer, il ne ne pas. Je suppose que cela est lié à restsharp utilisant httpclient qui utilise le moteur IE, qui dans notre société a des paramètres de sécurité des réseaux locaux/publics qui sont en quelque sorte pour IE. Quelqu'un a-t-il eu un problème similaire et a-t-il une idée sur la façon de le surmonter sans passer par le mode "Modifier les paramètres IE"?

tête d'appel basé NomHôte

enter image description here

tête d'appel basé sur IP

enter image description here

Fiddler journal, 1er lot - appel nom d'hôte, 2e lot - ip

enter image description here

Répondre

1

L'utilisation de AuthenticationSchemes.Ntlm devrait vous aider. Mais c'est plutôt une solution de contournement, car cela va forcer Ntlm.

0

Vous pouvez forcer le programme d'exportation à utiliser NTLM en utilisant les informations d'identification du cache.

var url = ConfigurationManager.AppSettings["UserAccessApi"]; 
var credential = new CredentialCache 
{ 
{ 
    new Uri(url), 
    "NTLM", 
    new NetworkCredential(username, password) 
    } 
}; 
_client = new RestClient(url) 
{ 
    Authenticator = new NtlmAuthenticator(credentials) 
}; 

NetworkCredential, qui est le titre de compétence par défaut pour NTLM, ne semble pas fonctionner pour le cas comme celui-ci.