次の方法で共有


認証済みフィードからのパッケージの使用

復元やインストールなどの多くの NuGet 操作では、nuget.configファイルで構成できる 1 つ以上のパッケージ ソースとの通信が必要です。

信頼できるパッケージ ソースを使用します。

HTTP フィードの場合、NuGet は認証されていない要求を行い、サーバーが HTTP 401 応答で応答した場合、NuGet は次の順序で資格情報を検索します。

  1. 環境変数 NuGetPackageSourceCredentials_{name}
  2. nuget.config ファイル内の資格情報
  3. パッケージ ソースで提供されている場合は、NuGet 資格情報プロバイダーを使用します。

使用する必要がある資格情報は、パッケージ ソースによって決まります。 そのため、資格情報プロバイダーを使用している場合を除き、使用する資格情報をパッケージ ソースに確認する必要があります。 パッケージ ソースでは、NuGet でパスワード (Web サイトにログインするパスワード) の使用を禁止するのが非常に一般的です。 通常は、NuGet のパスワードとして使用する個人用アクセス トークンを作成する必要がありますが、使用している NuGet サーバーのドキュメントを確認する必要があります。 Azure DevOps や GitHub などの一部のパッケージ ソースにはスコープ付きアクセス トークンがあるため、作成するすべてのトークンに必要なスコープが含まれるようにする必要がある場合があります。

資格情報を管理するためのセキュリティのベスト プラクティス

NuGet は上記の順序で資格情報を検索しますが、プライベート フィードで認証するときに資格情報を安全に管理するには、次のシーケンスをお勧めします。

  1. 資格情報プロバイダー: 可能な限り資格情報プロバイダーを使用することを強くお勧めします。 この方法では、シークレットをプレーン テキストで格納することを回避し、ソース管理を通じて誤ってシークレットを公開するリスクを最小限に抑えます。 さらに、通常は、資格情報の有効期限が切れたり変更されたりしたときに更新する必要がある場所の数が減ります。 資格情報プロバイダーがシングル サインオンをサポートしている場合、ログインの頻度や資格情報を保存する必要がある場所の数が減る可能性があります。 詳細については、 資格情報プロバイダーの セクションを参照してください。

  2. nuget.configの暗号化された資格情報 : 資格情報プロバイダーが使用できない場合は、暗号化された資格情報の使用を検討する必要があります。 この方法では、資格情報を暗号化された形式で格納することで、セキュリティの追加レイヤーが提供されます。 詳細については、nuget.config ファイルの資格情報に関するセクションを参照してください。

    暗号化されたパスワードは Windows でのみサポートされることに注意してください。 さらに、暗号化を解除できるのは、同じコンピューターと、最初に暗号化した同じユーザーだけです。

  3. nuget.configでの環境変数マクロの使用 : 暗号化された資格情報を使用できない場合は、環境変数マクロを使用して nuget.config ファイルに資格情報を格納することを検討してください。 この方法では、実際の資格情報を含む環境変数を参照できます。 これにより、透明性が向上し、エンド ユーザーが資格情報の構成方法を理解するのに役立ちます。 詳細については、nuget.config ファイルの資格情報に関するセクションを参照してください。

  4. 環境変数を直接使用する: フォールバック オプションとして、資格情報を環境変数に直接格納できます。 ただし、この方法では、 nuget.config ファイルで環境変数マクロを使用する場合と比べて、可視性と制御が低下する可能性があることに注意してください。 詳細については、 環境変数の資格情報に関するセクションを参照してください。

  5. NuGet.Config の平文資格情報: 前述のオプションのいずれかを使用することを強くお勧めします。 これらのオプションが実現できない場合は、 nuget.config ファイルに資格情報を格納できます。 ただし、このオプションは、他のセキュリティで保護されたオプションが使用できない環境でのみ使用してください。 詳細については、nuget.config ファイルの資格情報に関するセクションを参照してください。

    Warnung

    nuget.config ファイルにクリア テキストで資格情報を格納することは、特にソース管理にファイルを保存する場合、誤って資格情報が漏洩する可能性が高まるため、危険です。 nuget.config ファイルに資格情報を格納する必要がある場合は、上記で説明したより安全なオプションのいずれかを使用することを検討してください。

これらのベスト プラクティスに従うことで、機密情報の漏えいのリスクを最小限に抑えながら、プライベート フィードを安全に認証できます。

環境変数の資格情報

NuGet は、NuGetPackageSourceCredentials_{name}という名前の環境変数を検索します。ここで、{name}は、nuget.configファイルのパッケージ ソース内のkey="name"の値です。 環境変数の値は Username={username};Password={password}する必要があり、必要に応じて ;ValidAuthenticationTypes={types}含めることができます。 環境変数が NuGet の規則に一致しない場合、または値が NuGet の予期されるパターンを満たしていない場合、NuGet は環境変数を自動的に無視し、他の場所でパッケージ ソースの資格情報を検索し続けます。 NuGet が環境変数の資格情報を使用していることを示すログはありません。環境変数に有効期限が切れたシークレットが含まれており、構成ファイルの優先順位が低いため、新しいシークレットが nuget.config ファイルに追加されると、認証の問題のデバッグに問題が発生する可能性があります。

ヒント

CI/CD パイプラインで環境変数を使用することは、シークレットがログにキャプチャされるリスクを最小限に抑えるための優れた選択肢です。

たとえば、次の nuget.config ファイルについて考えてみます。

<configuration>
  <packageSources>
    <clear />
    <add key="Contoso" value="https://nuget.contoso.com/v3/index.json" />
  </packageSources>
</configuration>

この場合、ソース名は Contoso され、NuGet は環境変数の名前 NuGetPackageSourceCredentials_Contosoを検索します。 一部のプラットフォームでは大文字と小文字が区別されるため、 nuget.config ファイルで定義されているように、環境名とソース名に正しい大文字と小文字を使用するように注意してください。

ユーザー名が nugetUser され、パスワードが secret123されている場合は、環境変数の値を Username=nugetUser;Password=secret123 に設定する必要があります。 NuGet で HTTP 基本認証にのみこの資格情報を使用する必要があるが、他の認証スキームには使用しない場合は、環境変数の値を Username=nugetUser;Password=secret123;ValidAuthenticationTypes=Basic に設定できます。 有効な認証の種類の詳細については、nuget.config ファイル内のパッケージ資格情報に関するドキュメントを参照してください。

環境変数には許可される文字に制限があり、オペレーティング システムによって制限が異なる場合があります。 たとえば、スペースは許可されていません。 そのため、この環境変数機能を使用して、プラットフォームの環境変数に無効な文字を使用するパッケージ ソースの NuGet 資格情報を指定します。 このような場合は、 nuget.config ファイル内のパッケージ ソースの名前を変更する必要があります。

nuget.config ファイル内の資格情報

nuget.config ファイルには、パッケージ ソースの資格情報を含めることができます。 構文などの詳細については、 パッケージ ソースの資格情報に関する nuget.config ファイルリファレンスドキュメントセクション を参照してください。 ただし、コマンド ラインで dotnet nuget update source を使用して資格情報を設定する方が簡単です。

Warnung

特に資格情報をプレーン テキストとして保存する場合は、 nuget.config ファイルに資格情報を設定するときは注意してください。 資格情報がソース管理内の nuget.config ファイルに書き込まれると、シークレットが誤って漏えいするリスクが高まります。

NuGet は複数のファイルから設定を蓄積するため、ユーザー nuget.config ファイルに資格情報を保存することをお勧めします。 また、ビルドの信頼性のために、<clear />要素を含むソリューション (ソース コード リポジトリ) nuget.config ファイルにパッケージ ソースを保存することもお勧めします。

nuget.config ファイル内のユーザー名とプレーン テキスト パスワードは、使用する環境変数の名前の先頭と末尾に%を追加することで、環境変数を使用できます。 詳細については、 環境変数の使用に関する nuget.config リファレンス ドキュメントを参照してください

資格情報プロバイダー

NuGet には拡張性モデルがあり、 プラグインで NuGet 資格情報を提供できます。 NuGet が検出するために 資格情報プロバイダーをインストールする必要があるパスは、.NET Framework (NuGet.exe、MSBuild、Visual Studio) と .NET SDK (.NET 5 以降のランタイムで実行) では異なります。

NuGet には、対話型モードまたは非対話型モードで実行されるという概念があります。 非対話型モードの場合、資格情報プロバイダーは NuGet をブロックしないように求められます。 対話型モードでは、資格情報プロバイダーからログインを求められる場合があります。 ツールによって既定値が異なるため、シナリオによっては対話型モードをオプトインまたはオプトアウトする必要がある場合があります。

道具 既定値 切り替え
dotnet コマンドラインインターフェイス (CLI) 非対話型 --interactive 引数。 たとえば、dotnet restore --interactive のようにします。
MSBuild 非対話型 NuGetInteractive MSBuild プロパティ。 たとえば、msbuild -t:restore -p:NuGetInteractive=true のようにします。
NuGet.exe 対話型 -NonInteractive 引数。 たとえば、nuget.exe restore -NonInteractive のようにします。
Visual Studio 対話型 非対話型モードでは実行できません。

NuGet.exe は V1 と V2 の両方の資格情報プロバイダーをサポートしますが、MSBuild と .NET SDK はクロス プラットフォーム (V2) プラグインのみをサポートします。

Visual Studio では、NuGet には Visual Studio 資格情報プロバイダー インターフェイスがあります。このインターフェイスを使用すると、資格情報プロバイダーを使用してグラフィカル ログイン エクスペリエンスを提供したり、必要に応じて Visual Studio API を呼び出したりすることができます。 ソースを処理する Visual Studio 資格情報プロバイダーが見つからない場合、Visual Studio の NuGet はコマンド ライン資格情報プロバイダーにフォールバックします。

Visual Studio 2017 バージョン 15.9 以降には、Visual Studio、MSBuild、および NuGet.exe内で動作する Azure Artifacts の資格情報プロバイダーが含まれています。 ただし、.NET SDK の資格情報プロバイダーは Visual Studio に含まれていないため、dotnet CLI を使用するには個別にインストールする必要があります

資格情報プロバイダーの一覧

認識している資格情報プロバイダーの一覧を次に示します。