var handler = new System.Net.Http.HttpClientHandler
{
    UseProxy = true,
    Proxy = new System.Net.WebProxy(
        "http://proxy.example.net:8080")
};

var transport = new Azure.Core.Pipeline.HttpClientTransport(handler);

var credential = new Azure.Identity.ClientSecretCredential(
    tenantId, clientId, clientSecret,
    new Azure.Identity.ClientSecretCredentialOptions
    {
        Transport = transport
    });

var vault = new Azure.Security.KeyVault.Secrets.SecretClient(
    new Uri(vaultUrl),
    credential,
    new Azure.Security.KeyVault.Secrets.SecretClientOptions
    {
        Transport = transport
    });

アプリケーションの実際の vaultUrl、tenantId、clientId、clientSecret を使用します。二つの Transport = transport の代入は意図的です。一方がトークン取得を、もう一方が Key Vault のシークレット要求を経路指定します。

vaultUrl は実際の保管庫エンドポイントのままにします。ハンドラーの WebProxy が中間プロキシを保持し、保管庫のネットワークポリシーがその経路を許可する場合、公開 HTTP 候補がHTTP プロキシ一覧で利用できます。ネットワークが要求する場合は、クライアントを構築する前にその Credentials を構成してください。

クライアントのワークロードにはトランスポートを再利用し、シャットダウン時に所有リソースを破棄します。プロキシ接続が成功しても経路が確立されるだけで、アプリケーションがシークレットを読めるかどうかは Key Vault のネットワークポリシーとアクセスポリシーが決めます。

関連記事