.NETのどの資格情報がプロキシ用なのか
HTTPプロキシ認証で、WebProxy.Credentials、宛先サーバー用の資格情報、DefaultProxyCredentialsの違いを整理します。
独自のWebProxyでは、そのオブジェクトにプロキシのアカウントを設定します。.NETのほかの資格情報プロパティは、送り先が異なります。
| プロパティ | 送り先 |
|---|---|
WebProxy.Credentials | そのオブジェクトが表すプロキシ。 |
HttpClientHandler.Credentials | 宛先サーバー。 |
DefaultProxyCredentials | ProxyがnullかつUseProxyがtrueのときの、システム既定のプロキシ。 |
この.NET 10の例は明示的なプロキシと、その専用アカウントを指定します。
using System;
using System.Net;
using System.Net.Http;
string password = Environment.GetEnvironmentVariable("PROXY_PASSWORD")
?? throw new InvalidOperationException("Set PROXY_PASSWORD");
var proxy = new WebProxy("http://203.0.113.10:8080")
{
Credentials = new NetworkCredential("proxy-user", password)
};
using var handler = new HttpClientHandler
{
Proxy = proxy,
UseProxy = true
};
using var client = new HttpClient(handler)
{
Timeout = TimeSpan.FromSeconds(15)
};
using var response = await client.GetAsync("https://example.com/");
Console.WriteLine((int)response.StatusCode);
ドキュメント用の接続先を置き換え、運営者から提供されたアカウントを使ってください。認証不要のリスト項目に架空のログインを作る必要はありません。ハンドラーのProxyを明示的に設定しているため、DefaultProxyCredentialsはWebProxy.Credentialsの代わりにはなりません。
UseDefaultCredentialsの範囲もオブジェクトごとに異なります。ハンドラーのサーバー認証と、WebProxyのプロキシ認証は別です。プロセスユーザーのアカウントを送ることが407への汎用的な対応ではありません。
認証要求が続く場合は、実際の認証方式、選択した接続先、クライアント/ハンドラーのインスタンスを確認します。プロキシ認証は宛先TLSより前に行われる場合があるため、サイト用のAuthorizationヘッダーでは応答できません。対応する認証はハンドラー、プラットフォーム、サービス、配備ポリシーに依存します。この設定にWindows全体のプロキシ変更は不要です。