在 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 認證提供者外掛程式中找到範例實作。
外掛程式必須符合 NuGet 用戶端工具所規定的安全性需求,這一點非常重要。 外掛程式成為驗證外掛程式所需的最低版本是 2.0.0。 NuGet 會使用外掛程式執行握手,並查詢支援的作業宣告。 如需特定訊息的詳細資訊,請參閱 NuGet 跨平台外掛程式 通訊協定訊息 。
NuGet 會設定記錄層級,並在適用時提供外掛程式的 Proxy 資訊。 只有在 NuGet 將記錄層級設定為外掛程式之後,才能將記錄輸出至 NuGet 主控台。
- .NET Framework 外掛程式驗證行為
在 .NET Framework 中,允許外掛程式以對話框的形式提示使用者輸入。
- .NET Core 外掛程式驗證行為
在 .NET Core 中,無法顯示對話方塊。 外掛程式應該使用裝置流程來驗證。 外掛程式可以將記錄訊息傳送至 NuGet,並向使用者提供指示。 請注意,日誌記錄在設定日誌級別到插件後才可用。 NuGet 不會從命令列接受任何互動式輸入。
當用戶端以「Get Authentication Credentials」命令呼叫插件時,插件必須遵循互動開關的設置,並遵守對話框開關的設置。
下表摘要說明外掛程式在所有組合中的行為方式。
| 是非互動式 | 可以顯示對話框 | 外掛程式行為 |
|---|---|---|
| true | true | IsNonInteractive 開關相較於對話框選項具有優先權。 外掛程式不允許封鎖。 |
| true | 假的 | IsNonInteractive 開關相較於對話框選項具有優先權。 外掛程式不允許封鎖。 |
| 假的 | true | 如果需要,外掛程式可以顯示對話方塊。 例如,互動式登入或帳戶選擇。 |
| 假的 | 假的 | 外掛程式應該/不能顯示對話方塊。 外掛程式應該使用裝置流程,透過記錄器記錄指令訊息來進行驗證。 |
在 NuGet 7.0 之前,NuGet 均會在 dotnet CLI 上設定 CanShowDialog 為 false,而在 MSBuild 還原作業則會設定為 true。
從 7.0 開始,NuGet 一律會設定 CanShowDialog 為 true,但外掛程式仍應該偵測圖形介面何時無法使用。
例如,在 Linux 上透過 SSH 連線執行且無 X 轉送,或在 PowerShell 遠端會話中。
在編寫插件之前,請參考以下規範。