MSAL.NET に再利用可能なプロキシ クライアントを渡す
共有のプロキシ対応 HttpClient を包む IMsalHttpClientFactory を実装し、MSAL アプリケーション ビルダーに接続します。
MSAL.NET は HTTP トランスポートを IMsalHttpClientFactory から取得できます。プロキシ用に構成したクライアントをラップします。
sealed class TokenHttpFactory : IMsalHttpClientFactory
{
private readonly HttpClient client;
public TokenHttpFactory(HttpClient client)
{
this.client = client;
}
public HttpClient GetHttpClient() => client;
}ハンドラーとクライアントをアプリケーションの有効期間中に一度だけ作成し、既存の MSAL ビルダー構成の際にファクトリを接続します。
var proxy = new WebProxy("http://proxy.example:8080");
var handler = new HttpClientHandler { Proxy = proxy, UseProxy = true };
var tokenHttp = new HttpClient(handler);
builder.WithHttpClientFactory(new TokenHttpFactory(tokenHttp));ビルダーはアプリケーションの既存の MSAL アプリケーション ビルダーです。その authority、クライアント登録、資格情報の構成を維持します。プロキシ アカウントを使わない、許可された一般公開の HTTPS authority ルートでは、HTTP プロキシ一覧の HTTP アドレスを例の WebProxy に充てられます。 必要に応じて WebProxy にプロキシ資格情報を構成します。
ファクトリはスレッド セーフでなければなりません。GetHttpClient 呼び出しごとに新しく作るのではなく、クライアントを再利用します。MSAL は渡されたクライアントを破棄しません。その有効期間は所有者が管理します。
これは MSAL の HTTP 要求を制御します。対話型サインインは、ネットワークが別であるブラウザーを開くことがあります。したがってブラウザーでのサインイン成功は、トークンの HTTP クライアントが同じ経路を使うことを証明しません。