third-party-authentication.nuget
本文介绍如何配置 kmpkg 的相关功能,以实现对 NuGet 包源的身份认证。
二进制缓存提供程序:NuGet
许多云存储提供商都支持 NuGet 包源,例如 Azure Artifacts 和 GitHub 包注册表。 这些平台还提供访问控制能力,适用于限制组织或工作组内的访问范围。
前提条件
- 一个 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 系统上受支持。此外,只有加密密码的同一台机器上的同一个用户才能解密这些密码。
- 添加包源并配置认证凭据:
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(只写)。
后续步骤
你可以尝试以下后续操作: