NuGet Visual Studio Extension 3.6 以降では、資格情報プロバイダーがサポートされています。このプロバイダーを使用すると、NuGet で認証済みフィードを操作できます。 Visual Studio 用の NuGet 資格情報プロバイダーをインストールすると、必要に応じて、認証されたフィードの資格情報が NuGet Visual Studio 拡張機能によって自動的に取得および更新されます。
サンプル実装は、VsCredentialProvider サンプル にあります。
Visual Studio 内で、NuGet は内部 VsCredentialProviderImporter
を使用し、プラグイン資格情報プロバイダーもスキャンします。 これらのプラグイン資格情報プロバイダーは、IVsCredentialProvider
の種類の MEF エクスポートとして検出可能である必要があります。
Visual Studio の 4.8 以降の NuGet では、新しいクロスプラットフォーム認証プラグインもサポートされていますが、パフォーマンス上の理由から推奨されるアプローチではありません。
手記
Visual Studio 用の NuGet 資格情報プロバイダーは、通常の Visual Studio 拡張機能としてインストールする必要があり、Visual Studio 2017 以降 必要があります。
Visual Studio の NuGet 資格情報プロバイダーは、Visual Studio でのみ機能します (dotnet の復元や nuget.exeでは機能しません)。 nuget.exeを使用する資格情報プロバイダーについては、「nuget.exe 資格情報プロバイダーの」を参照してください。 dotnet および msbuild の資格情報プロバイダーについては、NuGet クロス プラットフォーム プラグイン を参照してください
Visual Studio 用の NuGet 資格情報プロバイダーの作成
NuGet Visual Studio Extension 3.6 以降では、資格情報の取得に使用される内部 CredentialService が実装されています。 CredentialService には、組み込みの資格情報プロバイダーとプラグイン資格情報プロバイダーの一覧があります。 各プロバイダーは順番に試され、資格情報が無事取得されるまで続けます。
資格情報の取得中、資格情報サービスは次の順序で資格情報プロバイダーを試し、資格情報が取得されるとすぐに停止します。
- 資格情報は、(組み込みの
SettingsCredentialProvider
を使用して) NuGet 構成ファイルからフェッチされます。 - Visual Studio 資格情報プロバイダーは順番に試されます。
- すべての NuGet クロス プラットフォーム資格情報プロバイダーを順番に使用してみてください。
- 資格情報がまだ取得されていない場合は、標準の基本認証ダイアログを使用して資格情報の入力を求められます。
IVsCredentialProvider.GetCredentialsAsync の実装
Visual Studio 用の NuGet 資格情報プロバイダーを作成するには、IVsCredentialProvider
の種類を実装するパブリック MEF エクスポートを公開し、以下に示す原則に従う Visual Studio 拡張機能を作成します。
public interface IVsCredentialProvider
{
Task<ICredentials> GetCredentialsAsync(
Uri uri,
IWebProxy proxy,
bool isProxyRequest,
bool isRetry,
bool nonInteractive,
CancellationToken cancellationToken);
}
サンプル実装は、VsCredentialProvider サンプル にあります。
Visual Studio 用の各 NuGet 資格情報プロバイダーは、次の手順を実行する必要があります。
- 資格情報の取得を開始する前に、対象の URI の資格情報を提供できるかどうかを判断します。 プロバイダーがターゲット ソースの資格情報を指定できない場合は、
null
を返す必要があります。 - プロバイダーが対象 URI の要求を処理するが、資格情報を指定できない場合は、例外をスローする必要があります。
Visual Studio 用のカスタム NuGet 資格情報プロバイダーは、NuGet.VisualStudio パッケージで使用できる IVsCredentialProvider
インターフェイスを実装する必要があります。
GetCredentialAsync
入力パラメーター | 説明 |
---|---|
URI URI | 資格情報が要求されているパッケージ ソース URI。 |
IWebProxy プロキシ | ネットワーク上で通信するときに使用する Web プロキシ。 プロキシ認証が構成されていない場合は Null。 |
bool isProxyRequest | この要求がプロキシ認証資格情報を取得するものである場合は、True です。 実装がプロキシ資格情報を取得するために有効でない場合は、null を返す必要があります。 |
bool isRetry | True である場合、資格情報がこの URI に対して以前に要求されていたが、指定された資格情報は承認されたアクセスを許可しなかった。 |
ブール 非対話型 | true の場合、資格情報プロバイダーはすべてのユーザー プロンプトを抑制し、代わりに既定値を使用する必要があります。 |
キャンセレーショントークン cancellationToken | 資格情報を要求する操作が取り消されたかどうかを判断するには、このキャンセル トークンを確認する必要があります。 |
戻り値: System.Net.ICredentials
インターフェイスを実装する資格情報オブジェクト。