在版本 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 将设置日志级别,并在适用时向插件提供代理信息。 只有在 NuGet 将日志级别设置为插件后,才能登录到 NuGet 控制台。
- .NET Framework 插件身份验证行为
在 .NET Framework 中,允许插件以对话框的形式提示用户输入。
- .NET Core 插件身份验证行为
在 .NET Core 中,无法显示对话框。 插件应使用设备流进行身份验证。 该插件可以将日志消息发送到 NuGet,并附带给用户的说明。 请注意,只有在将日志级别设置到插件后,日志记录才可用。 NuGet 不会从命令行获取任何交互式输入。
当客户端使用“请求身份验证凭据”调用插件时,插件需要符合互动开关并遵循对话框开关。
下表总结了插件对所有组合的行为方式。
| IsNonInteractive(非交互性) | CanShowDialog | 插件行为 |
|---|---|---|
| 是 | 是 | IsNonInteractive 开关优先于对话框开关。 不允许插件进行拦截。 |
| 是 | 假 | IsNonInteractive 开关优先于对话框开关。 不允许插件阻止。 |
| 假 | 是 | 如果需要,插件可以显示对话框。 例如,交互式登录或帐户选择。 |
| 假 | 假 | 插件应/无法显示对话框。 插件应使用设备流通过记录器记录指令消息进行身份验证。 |
在 NuGet 7.0 之前,NuGet 始终在 dotnet CLI 上设置为 CanShowDialog false,对于 MSBuild 还原,则为 true。
从 7.0 开始,NuGet 将始终把 CanShowDialog 设置为 true,但插件仍应在检测到无法使用图形界面时采取措施。
例如,在没有 X 转发或 PowerShell 远程会话的情况下通过 SSH 连接在 Linux 上运行时。
在编写插件之前,请参阅以下规范。