25

NuGet 1.5 状態のリリース ノート

NuGet now supports connecting to private repositories that require basic 
or NTLM authentication.

ただし、そこに含まれるリンクは、認証の設定方法についての言及がなくても、独自の nuget フィードページのホスティングにつながるだけです。

インターネットから https 経由でアクセスできる NuGet サーバーをセットアップしたいと考えていますが、認証に成功したユーザーのみがサーバー上のパッケージを表示またはダウンロードできます。

ドキュメントの「リモート フィードの作成」セクションで説明されているように、認証なしでアプリケーションを作成しましたが、イントラネットで問題なく動作します。このリポジトリで認証を有効にするにはどうすればよいですか?

追加の要件は、ソリューションに何百ドルもかかるものであってはならないということです (最初の 2 つの回答は、問題を解決するかもしれないが、多額の費用がかかる製品を宣伝します)。

4

2 に答える 2

45

これは、Web サイトで Windows 認証を有効にし、Sourcesコマンドライン オプションを使用してビルド サーバーに資格情報を追加することで実行できます。既定では、資格情報は、現在のコンピューターの現在のユーザーに制限された DPAPI キーを使用して格納されます (したがって、ビルド サーバーの場合、サービス アカウントでログインしているときに資格情報を追加する必要があります)。

開発者ワークステーションの場合、NuGet パッケージ マネージャーにフィードを追加し、フィードを更新するときに資格情報を入力/保存するだけで済みます (プロンプトが表示されます)。

ステップ 1 - NuGet サーバーで認証を要求する (IIS 構成)

使用する認証モジュールが IIS 用にインストールされていることを確認する必要があります。NTLM 認証の場合、Windows 認証モジュールが必要になります。インストールしたら、IIS マネージャーを開いて Web サイトにドリルダウンし、認証設定を開いて Windows 認証を有効にします。サポートしたくない認証モジュール (匿名、基本など) を無効にしてください。

ユーザー資格情報が使用されていることを確認するには、サイトを右クリックして [詳細設定] を選択し、[物理パス資格情報] のボタンをクリックします。ダイアログで、「アプリケーション ユーザー (パススルー認証)」が選択されていることを確認します。

コマンド ラインからの構成やネゴシエートの有効化 (それが目的である場合) など、Windows 認証の標準 IIS 構成の詳細については、TechNetを参照してください。

手順 2 - ソースを NuGet 構成に追加する (ビルド サーバー、パブリッシャー)

nuget.exe sources add -Name "Fabrikam Feed" -Source "https://nuget.fabrikam.com:443/nuget/"
nuget.exe sources add -Name "Fabirkam Publish" -Source "https://nuget.fabirkam.com:443/"

ここでは 2 つのエントリを追加します。1 つは通常の認証済みフィード URL として使用されます (サーバーからパッケージを取得するため)。2 つ目はサーバーへの公開に使用されます (nupkg ファイルの追加または更新)。

ステップ 3 - 追加されたソース (ビルド サーバー、パブリッシャー) の資格情報を更新する

nuget.exe sources update -Name "Fabrikam Feed" -Source "https://nuget.fabrikam.com:443/nuget/" -UserName "Developer" -Password "g0d"
nuget.exe sources update -Name "Fabrikam Publish" -Source "https://nuget.fabrikam.com:443/" -UserName "Developer" -Password "g0d"

ここで構成に資格情報を追加しました。表示%APPDATA%\NuGet\NuGet.configすると、追加したフィードと暗号化された資格情報が表示されます。

サーバーとしてログインできない場合は、StorePasswordInClearTextオプションを使用して資格情報をクリア テキストで保存できますが、共有環境ではお勧めできません。

ステップ 4 - (オプション) Visual Studio で発行 URL を無効にする (開発者向け)

Visual Studio を開き、[NuGet パッケージ マネージャーの設定] ダイアログに移動して、[Fabrikam Publish] フィードのチェックを外します。これは公開機能には影響しませんが、このフィードを無効にしないと、「すべて」のソースのパッケージを更新しようとするとエラーが発生します (これはフィード URL ではなく公開 URL であるため)。

ステップ 5 - (オプション) Windows 資格情報を Visual Studio に保存する (開発者向け)

Visual Studio を開き、NuGet パッケージ マネージャーに移動して、[Fabrikam Feed] をクリックします。資格情報の入力を求めるプロンプトが表示されます。ここに資格情報を入力し、保存/記憶オプションにチェックマークを付けることができます。これにより、Visual Studio でフィードを更新しようとしても、常に資格情報を要求されることがなくなります。NuGet パッケージ マネージャーの最新リリースでは、フィードは標準の HTTP 要求を使用してフェッチされ、nuget.config に保存した資格情報は使用されません。

ノート:

  1. プライベートで安全なフィードをホストするために、サード パーティのソリューションは必要ありません。NuGet サーバーは無料で利用でき、NTLM/AD/Windows セキュリティは IIS と NuGet ツールの両方でサポートされています。

  2. フィードに公開する必要がない開発者は、構成に資格情報を保存する必要はありません。また、「発行」フィードを構成する必要もありません。これは、ビルド サーバーまたは他のパブリッシャーにのみ必要です (re: ステップ 2 および 3)。

  3. パッケージ フィードを使用するすべての開発者は、手順 5 に関心があります。これは、ほとんどの開発者にとって必要なすべてです。Visual Studio 内からフィードを追加するだけで、プロンプトが表示されたら資格情報を入力できます。

  4. 資格情報が変更された場合は、[スタート] -> [Windows 資格情報の管理] に移動し、"VSCredentials_nuget.fabrikam.com" を削除できます。

  5. ステップ 2 はビジュアル スタジオで実行できますが、わかりやすくするために、ここではコマンド ラインを示します。ただし、ステップ 3 は、コマンドラインから (または NuGet API を使用して) 実行する必要があります。

  6. NuGet の将来のリリースでは、資格情報をソリューションまたはプロジェクト レベルで保存できるという噂があります (詳細は不明です)。これは、ビルド サーバーにアクセスできないマルチテナント ビルド環境にいるユーザーのみが関心を持つ可能性があります。 .

これが他の誰かに役立つことを願っています!

于 2013-12-18T12:49:30.480 に答える
2

私が実際に選んだ解決策は、TeamCity を NuGet サーバーとして使用することでした。nuget プッシュ機能がないため、セットアップが少し面倒ですが、認証されたユーザーのみに NuGet パッケージを提供する追加コストなしでうまく機能するようになりました。

于 2013-07-30T14:56:16.987 に答える