2

ログイン資格情報を必要とするサイトに対して HttpRequest を作成する必要がある場合は、次のようなコードを使用できますが、ご覧のとおり、ユーザー名とパスワードは base64 でエンコードされているだけです。彼らがしなければならないのは、「Authorization」ヘッダーに関連付けられた値を検索することであり、彼らは私のログイン情報を持っています。

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://...");

        request.Headers.Add("Authorization",
        string.Format("Basic {0}", Convert.ToBase64String(Encoding.Default.GetBytes(
        string.Format("{0}:{1}", username, password)))));

        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
        {
            using (Stream s = response.GetResponseStream())
            {
                using (StreamReader r = new StreamReader(s))
                {
                    DoSomething(r.ReadToEnd());
                }
            }
        }

次のコードはより良い代替手段ですか、それとも "Basic" Authorization ヘッダーで http リクエストを作成しますか?

        WebClient wc = new WebClient();
        wc.Credentials = new NetworkCredential(username, password);
        DoSomething(wc.DownloadString("https://..."));

どちらのコードもログイン資格情報を「隠す」http 要求にならず、実際にそれらを「隠す」方法がある場合、それを行う適切な方法は何ですか?

4

3 に答える 3

8

HTTPS を使用してサーバーに Web リクエストを行う場合、ヘッダーを含むメッセージ全体が暗号化されます。したがって、基本的にデータの暗号化について心配する必要はありません。Wireshark を開いてパケットのスニッフィングを試みると、パケットが読み取れないことがわかります。

.NET Framework は、要求の送信先の URL に基づいて、内部で必要な SSL 暗号化を処理します。

詳細については、MSDN を参照してください: http://msdn.microsoft.com/en-us/library/ds8bxk2a.aspx

于 2013-01-30T17:12:31.247 に答える
1

どちらも HTTP Basic Access Authentication を使用しますが、HTTPS を使用しているように見えるので、リクエスト全体がとにかく暗号化されるため、これについて心配する必要はありません。

于 2013-01-30T17:14:54.843 に答える
0

暗号化の一部であることを考慮せずに WebClient を使用することをお勧めします。よりクリーンなアプローチだと思います。ログイン資格情報を本当に気にする場合は、使用できます

SecureString testString = new SecureString(); 

http://blogs.msdn.com/b/fpintos/archive/2009/06/12/how-to-properly-convert-securestring-to-string.aspx

;

于 2013-01-30T17:22:16.657 に答える