跳到主要内容

third-party-authentication.nuget

本文介绍如何配置 kmpkg 的相关功能,以实现对 NuGet 包源的身份认证。

二进制缓存提供程序:NuGet

许多云存储提供商都支持 NuGet 包源,例如 Azure ArtifactsGitHub 包注册表。 这些平台还提供访问控制能力,适用于限制组织或工作组内的访问范围。

前提条件

  • 一个 NuGet 包源

1 - 将 nuget.exe 添加到 PATH 环境变量

kmpkg 会获取 nuget.exe 可执行文件的副本,用于执行二进制缓存相关操作。

运行 kmpkg fetch nuget 命令获取 NuGet 可执行文件的路径,并将其添加到 PATH 环境变量中。

kmpkg fetch nuget 输出示例

kmpkg fetch nuget
C:\dev\kmpkg\downloads\tools\nuget-6.10.0-windows\nuget.exe

修改 PATH 环境变量,将包含 nuget.exe 的目录添加进去。

PowerShell 会话中设置 PATH 的示例

$env:PATH="$env:PATH;C:\dev\kmpkg\downloads\tools\nuget-6.10.0-windows"

2 - 将私有包源添加为 NuGet 包源

方法 1:通过 NuGet CLI 预加载凭据

此方法会创建一个 NuGet 包源,存储包源 URL 和所需的认证凭据。

说明

请注意,加密密码仅在 Windows 系统上受支持。此外,只有加密密码的同一台机器上的同一个用户才能解密这些密码。

  1. 添加包源并配置认证凭据:
nuget.exe sources add -Name <包源名称> -Source <包源URL> -UserName <用户名> -Password <密码>

<用户名><密码> 替换为你的认证凭据,<包源URL> 替换为包源的实际 URL。

警告

强烈不建议以明文形式存储密码。有关安全管理凭据的更多信息,请参考从私有包源使用包的安全最佳实践。

在非 Windows 系统上,你可能需要在命令行中添加 -StorePasswordInClearText 选项。

方法 2:创建 nuget.config 文件

你可以创建 nuget.config 文件来配置 NuGet 包源。请以以下模板为基础,添加你自己的 NuGet 包源。

nuget.config 模板

警告

强烈不建议以明文形式存储密码。请注意,加密密码仅在 Windows 系统上受支持,且仅能由加密密码的同一台机器上的同一个用户解密。 有关安全管理凭据的更多信息,请参考从私有包源使用包的安全最佳实践。

说明

如果为 Password 传递了未加密的密码,会出现错误提示:"参数不正确"

<?xml version="1.0" encoding="utf-8"/>
<configuration>
<config>
<add key="defaultPushSource" value="<包源URL>" />
</config>
<packageSources>
<clear/>
<add key="myNugetFeed" value="<包源URL>" />
</packageSources>
<packageSourcesCredentials>
<!-- 必须与 packageSources 节中定义的 key 匹配 -->
<myNugetFeed>
<add key="Username" value="%NUGET_USERNAME%" />
<add key="Password" value="%NUGET_PASSWORD%" />
</myNugetFeed>
</packageSourcesCredentials>
</configuration>

<包源URL> 替换为你的 NuGet 包源 URL。你可以使用 % 包裹环境变量来引用它们,例如 %NUGET_USERNAME%%NUGET_PASSWORD%

警告

强烈不建议以明文形式存储密码。

在非 Windows 系统上,你可能需要使用 ClearTextPassword 替代 Password

请阅读 NuGet 配置文件文档了解更多信息。

3 - (可选)提供 API 密钥

部分 NuGet 包源提供商要求使用 API 密钥将包推送到包源。例如,GitHub Packages 要求将 GitHub 个人访问令牌(PAT)作为 API 密钥;而 Azure Artifacts 要求 API 密钥非空,但可以是任意值。

方法 1:通过 NuGet CLI 设置 API 密钥

使用 nuget setapikey 命令为特定包源 URL 设置 API 密钥。

PowerShell 中设置 API 密钥的示例

& $(kmpkg fetch nuget) setapikey $GITHUB_PAT_TOKEN -Source https://nuget.pkg.github.com/$GITHUB_OWNER/index.json

方法 2:通过 NuGet 配置文件设置 API 密钥

如果你使用 nuget.config 文件添加包源,可以在该文件中添加 <apiKeys> 节来设置对应的 API 密钥。

通过 nuget.config 文件设置 API 密钥的示例

<apiKeys>
<add key="<包源URL>" value="%API_KEY%" />
</apiKeys>

4 - 配置二进制缓存以使用 NuGet 包源

按如下方式设置 KMPKG_BINARY_SOURCES 环境变量:

$env:KMPKG_BINARY_SOURCES="nuget,<包源URL>,readwrite"

如果你使用 nuget.config 文件,请改用以下配置:

$env:KMPKG_BINARY_SOURCES="nugetconfig,<nuget.config 文件路径>,readwrite"

readwrite 权限为可选配置,可根据需要改为仅 read(只读)或 write(只写)。

后续步骤

你可以尝试以下后续操作: