1

Webブラウザーコントロールが埋め込まれたWPFC#クライアントアプリがあります。閲覧しているサイトで認証が必要な場合は、IAuthenticateを処理して必要な資格情報を渡すように、適切なフックをすべて用意しています(ユーザーは既にクライアントアプリにログインしています)。それはうまくいきますが...

ユーザー「Bob」がIEを介してサイトにアクセスし、ユーザー名とパスワードを入力すると、誰かがクライアントアプリを使用して「Steve」としてログインします。「Bob」セッションは引き続き認証され、サイトは新しい資格情報を要求しません。クライアントは「Bob」として接続します。

私が本当にやりたいのは、埋め込みブラウザがこのサイトに接続するたびに、クレデンシャルを送信し、ブラウザとサイトにそれらのクレデンシャルを使用させることです。

何か案は?

これは、さまざまなユーザーになりすます必要がある場合のテスト中の問題であることに注意してください。

4

2 に答える 2

2

Kerrクレデンシャルを使用する

于 2010-09-07T17:07:26.590 に答える
0

最初に行う必要があるのは、プロキシのユーザー資格情報を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);
    }
于 2017-03-14T15:16:57.870 に答える