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 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 开关优先于对话框开关。 不允许插件弹出对话框。 此组合仅适用于 .NET Framework 插件 |
true | false | IsNonInteractive 开关优先于对话框开关。 不允许阻止插件。 此组合仅适用于 .NET Core 插件 |
false | true | 插件应显示对话框。 此组合仅适用于 .NET Framework 插件 |
false | false | 插件应/无法显示对话框。 插件应使用设备流并通过记录器来记录指令消息,从而进行身份验证。 此组合仅适用于 .NET Core 插件 |
在编写插件之前,请参阅以下规范。