バージョン 4.8 以降では、すべての NuGet クライアント (NuGet.exe、Visual Studio、dotnet.exe、MSBuild.exe) で 、NuGet クロス プラットフォーム プラグイン モデルに基づいて構築された認証プラグインを使用できます。
dotnet.exe での認証
Visual Studio と NuGet.exe は、既定で対話型です。 NuGet.exe には、 非対話型にするスイッチが含まれています。 さらに、NuGet.exe と Visual Studio プラグインは、ユーザーに入力を求めます。 dotnet.exe では、プロンプトはなく、既定値は非対話型です。
dotnet.exe の認証メカニズムはデバイス フローです。 復元またはパッケージの追加操作を対話形式で実行すると、操作ブロックと認証を完了する方法がコマンド ラインでユーザーに指示されます。 ユーザーが認証を完了すると、操作は続行されます。
操作を対話形式にするには、 --interactive渡す必要があります。
現在、対話型スイッチをサポートするのは、明示的な dotnet restore コマンドと dotnet add package コマンドだけです。
dotnet buildとdotnet publishに対話型スイッチはありません。
MSBuild での認証
dotnet.exeと同様に、MSBuild.exe は既定では非対話型であり、MSBuild.exe 認証メカニズムはデバイス フローです。
復元を一時停止して認証を待機できるようにするには、 msbuild -t:restore -p:NuGetInteractive="true"を使用して復元を呼び出します。
クロスプラットフォーム認証プラグインの作成
サンプル実装は、 Microsoft Credential Provider プラグインにあります。
プラグインが NuGet クライアント ツールによって規定されているセキュリティ要件に準拠することが非常に重要です。 プラグインが認証プラグインであるために必要な最小バージョンは 2.0.0 です。 NuGet はプラグインとのハンドシェイクを実行し、サポートされている操作要求のクエリを実行します。 特定のメッセージの詳細については、NuGet クロス プラットフォーム プラグイン プロトコル メッセージ を参照してください。
NuGet はログ レベルを設定し、該当する場合はプロキシ情報をプラグインに提供します。 NuGet コンソールへのログ記録は、NuGet がログ レベルをプラグインに設定した後でのみ許容されます。
- .NET Framework プラグインの認証動作
.NET Framework では、プラグインを使用して、ダイアログ形式でユーザーに入力を求められます。
- .NET Core プラグインの認証動作
.NET Core では、ダイアログを表示できません。 プラグインでは、デバイス フローを使用して認証する必要があります。 プラグインは、ユーザーに指示を含むログ メッセージを NuGet に送信できます。 ログ レベルがプラグインに設定された後は、ログ記録を使用できます。 NuGet は、コマンド ラインから対話型の入力を受け取りません。
クライアントが Get Authentication Credentials を使用してプラグインを呼び出す場合、プラグインは対話機能スイッチに準拠し、ダイアログ スイッチを尊重する必要があります。
次の表は、すべての組み合わせに対するプラグインの動作をまとめたものです。
| IsNonInteractive | ダイアログを表示可能 | プラグインの動作 |
|---|---|---|
| true | true | IsNonInteractive スイッチは、ダイアログ スイッチよりも優先されます。 プラグインはブロックできません。 |
| true | false | IsNonInteractive スイッチは、ダイアログ スイッチよりも優先されます。 プラグインはブロックできません。 |
| false | true | プラグインは、必要に応じてダイアログを表示できます。 たとえば、対話型ログインやアカウントの選択などです。 |
| false | false | プラグインはダイアログを表示する必要があります/できません。 プラグインは、ロガーを介して命令メッセージをログに記録することによって認証するためにデバイス フローを使用する必要があります。 |
NuGet 7.0 より前では、NuGet は常に dotnet CLI で CanShowDialog を false に設定し、MSBuild 復元では true に設定していました。
7.0 以降、NuGet は常に CanShowDialog を true に設定しますが、プラグインはグラフィカル インターフェイスが使用できない場合も検出する必要があります。
たとえば、X 転送なしで SSH 接続を介して Linux で実行する場合や、PowerShell リモート セッションを実行する場合などです。
プラグインを記述する前に、次の仕様を参照してください。