1

J'ai une application client WPF C# avec un contrôle webbrowser intégré. J'ai tous les bons crochets en place de sorte que si le site que je suis en train de parcourir nécessite une authentification, je gère IAuthenticate et transmets les informations d'identification requises (l'utilisateur est déjà connecté à l'application cliente elle-même). Cela fonctionne très bien, sauf ...Comment forcer mon contrôle webbrowser basé sur IE à utiliser des informations d'authentification spécifiques?

Si l'utilisateur "Bob" visite le site via IE et entre son nom d'utilisateur et mot de passe, alors quelqu'un utilise l'application cliente et se connecte en tant que "Steve", "session de Bob est encore authentifié et le site ne demande jamais de nouvelles informations d'identification, de sorte que le client se connecte en tant que "Bob". Ce que je veux vraiment faire est chaque fois que le navigateur intégré se connecte à ce site, je veux envoyer les informations d'identification et forcer le navigateur et le site à utiliser ces informations d'identification.

Des idées?

Notez qu'il s'agit plus d'un problème lors des tests lorsque j'ai besoin d'emprunter l'identité de différents utilisateurs.

Répondre

2

Utilisez Kerr Credentials

+0

OK, c'est ce dont j'avais besoin, merci! La chose confuse est que rien que vous pouvez faire à partir du navigateur IE ou à travers le webcontrol affectera le coffre-fort Windows 7 qui stocke vos informations d'identification Windows. Si vous avez déjà dit "Mémoriser ceci" sur un compte Windows, connectez-vous dans le coffre-fort et le seul moyen de l'effacer est le panneau de contrôle/User Management/Windows Vault ou la bibliothèque référencée dans la réponse de Dmitry . – CMPalmer

0

La première chose que vous devez faire est d'écrire les informations d'identification utilisateur du proxy de l'utilisateur Windows cache des informations d'identification.

public static void SetCredentials(string username, string password, string proxydomain) 
    { 
     Credential deleteCredentials = new Credential 
     { 
      Target = proxydomain 
     }; 
     if (deleteCredentials.Exists()) 
      deleteCredentials.Delete(); 

     Credential proxyCredential = new Credential 
     { 

      Username = username, 
      Password = password , 
      Target = proxydomain, 
      Type = CredentialType.Generic, 
      PersistanceType = PersistanceType.Enterprise 
     }; 
     proxyCredential.Save(); 


    } 

Ensuite, vous devez ajouter l'information au registre.

public static void setProxyRegistry(string proxyhost, bool proxyEnabled, string username, string password) 
    { 
     const string userRoot = "HKEY_CURRENT_USER"; 
     const string subkey = "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings"; 
     const string keyName = userRoot + "\\" + subkey; 

     Registry.SetValue(keyName, "ProxyServer", proxyhost, RegistryValueKind.String); 
     Registry.SetValue(keyName, "ProxyEnable", proxyEnabled ? "1" : "0", RegistryValueKind.DWord); 

     if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password)) 
     { 
      Registry.SetValue(keyName, "ProxyPass", password, RegistryValueKind.String); 
      Registry.SetValue(keyName, "ProxyUser", username, RegistryValueKind.String); 
     } 

     //<-loopback>;<local> 
     Registry.SetValue(keyName, "ProxyOverride", "*.local", RegistryValueKind.String); 


     // These lines implement the Interface in the beginning of program 
     // They cause the OS to refresh the settings, causing IP to realy update 
     InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0); 
     InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0); 
    }