NetworkCredential UseDefaultCredentials ne fonctionne pas

Nous avons écrit un code long pour appeler un service avec des informations d’identification de domaine. Maintenant, les domaines sont modifiés et prévoient d’utiliser le compte Windows par défaut

J’essaie donc de réinitialiser les informations d’identification réseau pour un service Web asmx via config. J’ai créé une classe SoapExtentsion et j’essaie d’y substituer même s’il exécute la ligne. Mais il n’est jamais appliqué et toujours le code existant ci-dessous gagne

Code actuel

EmployeeService prxy = new EmployeeService(); prxy.Credentials = new System.Net.NetworkCredential("MyAccount", "pwd", "MyDomain"); //prxy.UseDefaultCredentials = true;// It works but we dont want code change prxy.GetEmployee(empId); 

Nouveau code / changement de configuration uniquement

Planification de l’injection via des modifications supplémentaires de DLL et de configuration. Donc, le changement de code dans le code original ci-dessus n’est pas requirejs / interdit maintenant

 public class WindowsDefCredSoapExtn : SoapExtension { public override object GetInitializer(Type serviceType) { return ""; } public override object GetInitializer(LogicalMethodInfo methodInfo, SoapExtensionAtsortingbute atsortingbute) { return ""; } public override void Initialize(object initializer) { //throw new NotImplementedException(); } public override void ProcessMessage(SoapMessage message) { if (message is SoapClientMessage) { if (message.Stage == SoapMessageStage.BeforeSerialize) { ((SoapClientMessage)message).Client.Credentials=null; (((SoapClientMessage)message)).Client.UseDefaultCredentials = true; } } } } }        

Quelqu’un sait-il comment changer dynamicment les références réseau utilisées pour un service ASMX via config?

METTRE À JOUR:

Pendant le débogage, je pouvais voir que les informations d’identification réseau étaient réinitialisées. Mais de toute façon, il envoie au serveur lors de l’appel de la demande.

 EmployeeService prxy = new EmployeeService(); prxy.Credentials = new System.Net.NetworkCredential("MyAccount", "pwd", "MyDomain"); //while debug, prxy.UseDefaultCredentials= false here //My soap extension gets executed and resets credentials. prxy.GetEmployee(empId); //while debug, prxy.UseDefaultCredentials= true here //while debug prxy.Credentials are null here. 

Fenêtre de sortie:

Voir la dernière ligne AcquireCredentialsHandle transmet authdata . Les informations d’identification définies dans prxy.Credentials = new System.Net.NetworkCredential("MyAccount", "pwd", "MyDomain") sont utilisées même si l’extension de service a été réinitialisée.

 System.Net Verbose: 0 : [11584] WebRequest::Create(http://employee-service/empService.asmx) System.Net Verbose: 0 : [11584] HttpWebRequest#39256744::HttpWebRequest(http://employee-service/empService.asmx#173042156) System.Net Information: 0 : [11584] RAS supported: True System.Net Verbose: 0 : [11584] Exiting HttpWebRequest#39256744::HttpWebRequest() System.Net Verbose: 0 : [11584] Exiting WebRequest::Create() -> HttpWebRequest#39256744 System.Net Verbose: 0 : [11584] HttpWebRequest#39256744::GetRequestStream() System.Net Information: 0 : [11584] Associating HttpWebRequest#39256744 with ServicePoint#19085264 System.Net Information: 0 : [11584] Associating Connection#65246235 with HttpWebRequest#39256744 System.Net.Sockets Verbose: 0 : [11584] Socket#27993665::Socket(InterNetwork#2) System.Net.Sockets Verbose: 0 : [11584] Exiting Socket#27993665::Socket() System.Net.Sockets Verbose: 0 : [11584] Socket#27993665::Connect(45:80#763949146) System.Net.Sockets Information: 0 : [11584] Socket#27993665 - Created connection from 10.234.80.99:48954 to 10.242.137.45:80 System.Net Information: 0 : [11584] HttpWebRequest#39256744 - Request: POST /empService.asmx HTTP/1.1 System.Net.Sockets Verbose: 0 : [11584] Socket#27993665::Send() System.Net.Sockets Verbose: 0 : [11584] Data from Socket#27993665::Send System.Net.Sockets Verbose: 0 : [11584] < 512#512 System.Net Information: 0 : [11584] ConnectStream#50996063 - Sending headers { User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.2034) VsDebuggerCausalityData: uIDPo3GOBVodvqZLgUWyCSNWI5kAAAAAzHBQpKvNJ0SvKGwy+a3tGerbsJdijWdHqs2PJipnfqYACQAA Content-Type: text/xml; charset=utf-8 SOAPAction: "http://employee-service/GetProperties" Host: employee-service Content-Length: 507 Expect: 100-continue Connection: Keep-Alive }. System.Net.Sockets Verbose: 0 : [11584] Socket#27993665::Receive() System.Net.Sockets Verbose: 0 : [11584] Data from Socket#27993665::Receive System.Net.Sockets Verbose: 0 : [11584] <> System.Net.Sockets Verbose: 0 : [11584] Exiting Socket#27993665::Receive() -> 109#109 System.Net Information: 0 : [11584] Connection#65246235 - Received status line: Version=1.1, StatusCode=401, StatusDescription=Unauthorized. System.Net Information: 0 : [11584] Connection#65246235 - Received headers { Content-Length: 0 Date: Fri, 08 Jul 2016 16:11:15 GMT WWW-Authenticate: NTLM }. System.Net Information: 0 : [11584] ConnectStream#7794715::ConnectStream(Buffered 0 bytes.) System.Net.Sockets Verbose: 0 : [11584] Socket#27993665::MultipleSend() System.Net.Sockets Verbose: 0 : [11584] Exiting Socket#27993665::MultipleSend() System.Net Verbose: 0 : [11584] Data from ConnectStream#50996063::ResubmitWrite System.Net Information: 0 : [11584] Associating HttpWebRequest#39256744 with ConnectStream#7794715 System.Net Information: 0 : [11584] Associating HttpWebRequest#39256744 with HttpWebResponse#29471296 System.Net Information: 0 : [11584] Enumerating security packages: System.Net Information: 0 : [11584] Negotiate System.Net Information: 0 : [11584] Kerberos System.Net Information: 0 : [11584] NTLM System.Net Information: 0 : [11584] Microsoft Unified Security Protocol Provider System.Net Information: 0 : [11584] Schannel System.Net Information: 0 : [11584] WDigest System.Net Information: 0 : [11584] DPA System.Net Information: 0 : [11584] Digest System.Net Information: 0 : [11584] MSN System.Net Information: 0 : [11584] AcquireCredentialsHandle(package = NTLM, intent = Outbound, authdata = MyDomain\MyAccount) 

MISE À JOUR 2

Je viens de faire un changement de code pour tester et ci-dessous est la différence dans la communication socket

 AcquireDefaultCredential(package = NTLM, intent = Outbound) 

Contre

 AcquireCredentialsHandle(package = NTLM, intent = Outbound, authdata = MyDomain\MyAccount) 

Si je vous ai bien compris, je pense que vous devez append des clés pour votre compte, votre nom d’utilisateur et votre mot de passe sous appSettings dans le fichier de configuration.

      

Après cela dans votre code,

 EmployeeService prxy = new EmployeeService(); prxy.Credentials = new System.Net.NetworkCredential(System.Configuration.ConfigurationManager.AppSettings["UserName"].ToSsortingng(), System.Configuration.ConfigurationManager.AppSettings["Password"].ToSsortingng(), System.Configuration.ConfigurationManager.AppSettings["YourDomain"].ToSsortingng()); //while debug, prxy.UseDefaultCredentials= false here //My soap extension gets executed and resets credentials. prxy.GetEmployee(empId);