ログイン資格情報を必要とするサイトに対して 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 要求にならず、実際にそれらを「隠す」方法がある場合、それを行う適切な方法は何ですか?