NuGet 跨平台身份验证插件

在版本 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 中的身份验证机制为设备流。 当以交互方式运行 restore 或 add package 操作时,此操作会阻止用户进行身份验证,并在命令行中提供如何完成身份验证的说明。 用户完成身份验证后,此操作将继续。

若要使此操作变为交互式,则应传递 --interactive。 目前,只有显式 dotnet restoredotnet add package 命令支持交互式开关。 dotnet builddotnet 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 开关优先于对话框开关。 不允许插件弹出对话框。 此组合仅适用于 .NET Framework 插件
true false IsNonInteractive 开关优先于对话框开关。 不允许阻止插件。 此组合仅适用于 .NET Core 插件
false true 插件应显示对话框。 此组合仅适用于 .NET Framework 插件
false false 插件应/无法显示对话框。 插件应使用设备流并通过记录器来记录指令消息,从而进行身份验证。 此组合仅适用于 .NET Core 插件

在编写插件之前,请参阅以下规范。