Share via


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

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

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

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

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

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

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

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

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

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

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

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

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

入力パラメーター

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

終了コード

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

標準出力

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

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();