次の方法で共有


nuget.exe 資格情報プロバイダーを使用したフィードの認証

バージョン 3.3 では、 nuget.exe 固有の (v1) 資格情報プロバイダーのサポートが追加されました。 それ以来、すべてのコマンド ライン シナリオ (4.8nuget.exe) で動作する dotnet.exeのバージョン msbuild.exeサポートが追加されました。

すべての認証方法の詳細については、 認証済みフィードからのパッケージの使用 に関するページを参照してください。

nuget.exe 資格情報プロバイダーの検出

nuget.exe 資格情報プロバイダーは、次の 3 つの方法で使用できます。

  • グローバル: 現在のユーザーのプロファイルで実行 nuget.exe すべてのインスタンスで資格情報プロバイダーを使用できるようにするには、それを %LocalAppData%\NuGet\CredentialProvidersに追加します。 CredentialProviders フォルダーの作成が必要になる場合があります。 資格情報プロバイダーは、 CredentialProviders フォルダーのルートまたはサブフォルダー内にインストールできます。 資格情報プロバイダーに複数のファイル/アセンブリがある場合は、サブフォルダーを使用してプロバイダーを整理できます。

  • 環境変数から: nuget.exe環境変数をプロバイダーの場所に設定することで、資格情報プロバイダーを任意の場所に格納し、%NUGET_CREDENTIALPROVIDERS_PATH%にアクセスできるようにします。 複数の場所がある場合、この変数はセミコロンで区切られたリスト (たとえば、 path1;path2) にすることができます。

  • nuget.exeと共 に:nuget.exe 資格情報プロバイダーは、 nuget.exeと同じフォルダーに配置できます。

資格情報プロバイダーを読み込むときに、 nuget.exe は、 credentialprovider*.exeという名前の任意のファイルについて、上記の場所を順番に検索し、見つかった順序でそれらのファイルを読み込みます。 同じフォルダーに複数の資格情報プロバイダーが存在する場合は、アルファベット順に読み込まれます。

nuget.exe 資格情報プロバイダーの作成

資格情報プロバイダーは、入力を収集し、必要に応じて資格情報を取得し、適切な終了状態コードと標準出力を返す、 CredentialProvider*.exe形式で名前付けされたコマンド ライン実行可能ファイルです。

プロバイダーは、次の操作を行う必要があります。

  • 資格情報の取得を開始する前に、対象の URI の資格情報を提供できるかどうかを判断します。 そうでない場合は、資格情報のない状態コード 1 が返されます。
  • NuGet.Configを変更しないでください (資格情報の設定など)。
  • NuGet はプラグインにプロキシ情報を提供しないため、HTTP プロキシ構成を単独で処理します。
  • UTF-8 エンコードを使用し、JSON 応答オブジェクト(下記参照)を stdout に書き込んで、資格情報またはエラーの詳細を nuget.exe に返します。
  • 必要に応じて、stderr に追加のトレース ログを出力します。 シークレットは決して stderr に書き込むべきではありません。なぜなら、詳細レベルが「normal」や「detailed」の場合、NuGet によりそうしたトレースがコンソールにエコーされるからです。
  • 予期しないパラメーターは無視して、将来のバージョンの NuGet との互換性を確保する必要があります。

入力パラメーター

パラメーター/スイッチ Description
Uri {value} 資格情報を必要とするパッケージ ソース URI。
非インタラクティブ 存在する場合、プロバイダーは対話型プロンプトを発行しません。
IsRetry 存在する場合は、この試行が以前に失敗した試行の再試行であることを示します。 プロバイダーは通常、このフラグを使用して、既存のキャッシュをバイパスし、可能であれば新しい資格情報を要求します。
冗長度 {value} 存在する場合は、"normal"、"quiet"、または "detailed" のいずれかの値を指定します。 値が指定されていない場合、既定値は "normal" になります。 プロバイダーは、標準エラー ストリームに出力する省略可能なログ記録のレベルを示すために、これを使用する必要があります。

終了コード

Code 結果 Description
0 Success 資格情報が正常に取得され、stdout に書き込まれています。
1 プロバイダー該当なし 現在のプロバイダーは、指定された URI の資格情報を提供しません。
2 Failure プロバイダーは、指定された URI の正しいプロバイダーですが、資格情報を指定することはできません。 この場合、nuget.exe は認証を再試行せず、失敗します。 一般的な例は、ユーザーが対話型ログインをキャンセルする場合です。

標準出力

プロパティ 注記
ユーザー名 認証された要求のユーザー名。
パスワード 認証された要求のパスワード。
メッセージ 応答に関するオプションの詳細。失敗した場合に追加の詳細を表示するためにのみ使用されます。

stdout の例:

{ "Username" : "freddy@example.com",
    "Password" : "bwm3bcx6txhprzmxhl2x63mdsul6grctazoomtdb6kfbof7m3a3z",
    "Message"  : "" }

資格情報プロバイダーのトラブルシューティング

現時点では、NuGet はカスタム資格情報プロバイダーのデバッグを直接サポートしていません。 問題 4598 はこの作業を追跡しています。

次の操作も実行できます。

  • -verbosity スイッチを使用して nuget.exe を実行して、詳細な出力を検査します。

  • 適切な場所の stdout にデバッグ メッセージを追加します。

  • nuget.exe 3.3 以降を使用していることを確認します。

  • 次のコード スニペットを使用して、起動時にデバッガーをアタッチします。

    while (!Debugger.IsAttached)
    {
        System.Threading.Thread.Sleep(100);
    }
    Debugger.Break();