NuGet 認証情報プロバイダーを通じた Visual Studio でのフィード認証
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 では、新しいクロスプラットフォーム認証プラグインもサポートされていますが、これらはパフォーマンス上の理由から、おすすめのアプローチではありません。
Note
Visual Studio 用の NuGet 認証情報プロバイダーは、通常の Visual Studio 拡張情報としてインストールする必要があり、Visual Studio 2017 以降が必要です。
Visual Studio の NuGet 認証情報プロバイダーは、Visual Studio でのみ機能します (dotnet restore または nuget.exe では機能しません)。 nuget.exe を使用する認証情報プロバイダーについては、「nuget.exe 認証情報プロバイダー」を参照してください。 dotnet および msbuild の認証情報プロバイダーについては、NuGet クロス プラットフォーム プラグインを参照してください
Visual Studio 向け NuGet 認証情報プロバイダーの作成
NuGet Visual Studio Extension 3.6 以降では、認証情報の取得に使用される内部の CredentialService が実装されています。 CredentialService には、組み込みおよびプラグインの認証情報プロバイダーのリストがあります。 各プロバイダーは、認証情報が取得されるまで、順番に試行されます。
認証情報の取得中に、認証情報サービスは次の順序で認証情報プロバイダーを試していき、認証情報が取得されるとすぐに停止します。
- 認証情報は、NuGet 構成ファイル (組み込みの
SettingsCredentialProvider
を使用) からフェッチされます。 - パッケージ ソースが Visual Studio Team Services 上にある場合は、その
VisualStudioAccountProvider
が使用されます。 - 他のすべてのプラグイン 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 | この URI に対して認証情報が以前に要求されたが、指定された認証情報で承認されたアクセスが許可されなかった場合は True。 |
bool nonInteractive | true の場合、認証情報プロバイダーはすべてのユーザー プロンプトを抑制し、代わりに既定値を使用する必要があります。 |
CancellationToken cancellationToken ) => | このキャンセル トークンをチェックして、認証情報を要求する操作が取り消されたかどうかを判断する必要があります。 |
戻り値: System.Net.ICredentials
インターフェイスを実装する認証情報オブジェクト。