You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Choco从J-Frog仓库安装Windows NuGet包的Vault凭证死循环问题

解决方案

1. 用用户凭证兑换J-Frog短期访问Token

利用Windows原生PowerShell调用J-Frog API,用用户账号密码直接生成短期token(有效期设为1小时足够完成初始安装),无需提前安装任何工具:

$username = Read-Host "请输入你的账号"
$password = Read-Host "请输入你的密码" -AsSecureString
$plainPassword = [System.Net.NetworkCredential]::new("", $password).Password
$authBase64 = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("$username:$plainPassword"))

$tokenResponse = Invoke-RestMethod -Uri "https://<你的J-Frog域名>/artifactory/api/security/token" `
    -Method Post `
    -Headers @{Authorization = "Basic $authBase64"} `
    -Body @{grant_type = "password"; username = $username; password = $plainPassword; expires_in = "3600"}

$accessToken = $tokenResponse.access_token

这个短期token仅用于拉取初始工具,有效期短且无需用户手动输入,规避了token存储和输入的问题。

2. 下载并安装初始工具(NuGet/Choco)

用短期token通过PowerShell原生命令从J-Frog仓库拉取离线安装包,完成本地安装:

# 下载NuGet.exe
Invoke-WebRequest -Uri "https://<你的J-Frog域名>/artifactory/<NuGet仓库路径>/nuget.exe" `
    -Headers @{Authorization = "Bearer $accessToken"} `
    -OutFile "$env:TEMP\nuget.exe"

# 下载Choco离线包
Invoke-WebRequest -Uri "https://<你的J-Frog域名>/artifactory/<Choco仓库路径>/chocolatey.nupkg" `
    -Headers @{Authorization = "Bearer $accessToken"} `
    -OutFile "$env:TEMP\chocolatey.nupkg"

# 配置NuGet源并安装Choco
& "$env:TEMP\nuget.exe" sources Add -Name "J-Frog-NuGet" -Source "https://<你的J-Frog域名>/artifactory/api/nuget/<NuGet仓库名>" -Username $username -Password $accessToken
& "$env:TEMP\nuget.exe" install chocolatey -Source "$env:TEMP" -OutputDirectory "$env:ProgramData\chocolatey"
$env:Path += ";$env:ProgramData\chocolatey\bin"

# 配置Choco源
choco source add -n="J-Frog-Choco" -s="https://<你的J-Frog域名>/artifactory/api/chocolatey/<Choco仓库名>" -u="$username" -p="$accessToken" --priority=1

3. 安装Vault并获取长期专用Token

通过已配置好的Choco安装Vault,再用用户凭证向Vault认证,获取绑定软件安装权限的长期专用token:

# 安装Vault
choco install hashicorp-vault -y

# 登录Vault并生成专用token
vault login -method=userpass username=$username password=$plainPassword
$vaultToken = vault token create -role=software-install-role -format=json | ConvertFrom-Json | Select-Object -ExpandProperty auth | Select-Object -ExpandProperty client_token

# 更新Choco/NuGet源为Vault token(可选,用于后续批量安装)
choco source remove -n="J-Frog-Choco"
choco source add -n="J-Frog-Choco" -s="https://<你的J-Frog域名>/artifactory/api/chocolatey/<Choco仓库名>" -u="vault-token" -p="$vaultToken" --priority=1

4. 完成批量软件安装及清理

用配置好的Choco完成批量软件安装,最后清理临时资源和敏感数据:

# 批量安装软件
choco install <软件包1> <软件包2> ... -y

# 清理临时文件和敏感变量
Remove-Item "$env:TEMP\nuget.exe" -Force
Remove-Item "$env:TEMP\chocolatey.nupkg" -Force
$authBase64 = $null
$accessToken = $null
$plainPassword = $null
$vaultToken = $null

内容的提问来源于stack exchange,提问作者Stripy42

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 21:58:17