Как заставить мой элемент управления веб-браузера на базе IE использовать определенные учетные данные для аутентификации? - PullRequest
1 голос
/ 07 сентября 2010

У меня есть клиентское приложение WPF C # со встроенным веб-браузером. У меня есть все необходимые хуки, так что если сайт, на который я просматриваю, требует аутентификации, я обрабатываю IAuthenticate и передаю необходимые учетные данные (пользователь уже вошел в само клиентское приложение). Это прекрасно работает, кроме ...

Если пользователь «Боб» заходит на сайт через IE и вводит свое имя пользователя и пароль, тогда кто-то использует клиентское приложение и входит в систему как «Стив», сеанс «Боба» все еще аутентифицируется, и сайт никогда не запрашивает новые учетные данные поэтому клиент подключается как «Боб».

Что я действительно хочу сделать, так это каждый раз, когда встроенный браузер подключается к этому сайту, я хочу отправить учетные данные и заставить браузер и сайт использовать эти учетные данные.

Есть идеи?

Обратите внимание, что это больше проблема во время тестирования, когда мне нужно выдать себя за другого пользователя.

Ответы [ 2 ]

2 голосов
/ 07 сентября 2010

Использовать Учетные данные Kerr

0 голосов
/ 14 марта 2017

Первое, что вам нужно сделать, это записать учетные данные пользователя прокси в кэш учетных данных пользователя Windows.

 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();


    }

тогда вам нужно добавить информацию в реестр.

 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);
    }
...