8
votes

Comment utiliser le proxy comme navigateur ou credentialcache.defaultCredentials différents entre XP et 7

Je suis capable de résoudre un problème avec un client où ils ne peuvent pas s'authentifier via un proxy en procédant comme suit:

service.PreAuthenticate = true;
service.Url = "myurl";
service.Credentials = new NetworkCredential(txt_UserName.Text, txt_Password.Text);


2 commentaires

Cela a une sorte d'odeur d'UAC ...


Je suis d'accord, mais je ne trouve aucune documentation dans ce sens. J'essaie de trouver une telle documentation et, si je ne trouve pas que je ne trouve pas que je vais essayer de décompiler le code et de comprendre ce qu'il va explicitement


4 Réponses :


2
votes

Ce morceau de code fonctionne pour moi sur XP, Win7 et 2008

var webProxy = new WebProxy(WebRequest.DefaultWebProxy.GetProxy(new Uri({TheURLoftheService})));
webProxy.Credentials = CredentialCache.DefaultCredentials;
webProxy.UseDefaultCredentials = true;
service.Proxy = webProxy;


1 commentaires

Cela n'a pas résolu le problème. C'est la même chose que je fais maintenant, sauf que vous obtenez le proxy de manière différente. Le utiliséefaultCredentials = true ne fait rien lorsquefilleCredentials est déjà défini, par msdn.microsoft.com/en-us/library/...



2
votes

on dirait en fait qu'ils "corrigé" dans Win7 :) Pouvez-vous confirmer que le client et le serveur spécifient HTTP 1.1

Discutons maintenant sur la raison pour laquelle le navigateur fonctionne dans ce scénario. C'EST À DIRE Utilise Wininet sous le capot plutôt que WinHTTP. Si on regarde la Traces de réseau Nous voyons que c'est-à-dire envoie http / 1.1, mais la proxy répond avec http / 1.0. C'est-à-dire accepte toujours ce comportement, car sur Internet Scénario Il y a un nombre incitent de clients et de serveurs qui encore Utilisez http / 1.0.

winhttp nécessite strictement la conformité http / 1.1 pour garder le La connexion Alive et HTTP Keep-Alives ne sont pas prises en charge dans http / 1.0 protocole. La fonctionnalité HTTP Keep-Alive a été introduite dans le HTTP / 1.1 Protocole selon RFC 2616. Le serveur ou le proxy qui attend le Garder-vivant devrait également mettre en œuvre correctement le protocole. Winhttp sur Windows 7, Windows 2008 R2 sont stricts en termes de sécurité ERTO Conformité de protocole. La solution idéale consiste à modifier le serveur / proxy utiliser le protocole droit et être conforme RFC.

http://blogs.msdn.com/b/httpcontext/archive/2012/02/21/changes-in-winhttp-on-windows-7-and-onwards- wrto-http-1-0.aspx


3 commentaires

Très intéressant! Je vais devoir vérifier quand je vais travailler. Si c'est le cas, cela vaut vraiment la peine de 250 Bounty :)


Désolé, pas de chance. Voici la sortie PCAP: Connect URL: 443 http / 1.1 \ r \ n suivi d'un http / 1.1 407 non autorisé \ r \ n http 1.1 est spécifié dans la demande et réponse


Bien que cela ne fonctionne pas, je vais vous accorder la prime à vous que vous veniez avec la seule réponse qui n'était pas ce que la mine était déjà "essentiellement"



0
votes

Ce travail va-t-il fonctionner?

J'utilise ceci pour définir le proxy, nous n'avons pas rencontré une erreur sur toutes les plateformes Windows P>

Uri address = new Uri("http://your-webservice-address");

//Get User current network credential
ICredentials credentials = CredentialCache.DefaultCredentials;
NetworkCredential credential = credentials.GetCredential(address, "Basic");

//Get HttpWebRequest
HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;

//Network Credential should be included on the request to avoid network issues when requesting to the web servic
request.Proxy = WebRequest.DefaultWebProxy;
request.Credentials = new NetworkCredential(credential.UserName, credential.Password, credential.Domain);


2 commentaires

J'ai essayé GetProxy en utilisant l'adresse, mais pas getcredentials. Je vais donner cela un essai et vous laissera savoir


ok cool .. laissez-moi savoir quand vous l'avez essayé et rencontré des erreurs



0
votes

Il est difficile de dire en fonction du code que vous avez donné. Je soupçonnerais que ce soit vos paramètres, soit vos variables de proxy.

check IT May aide.


0 commentaires