为什么我的 powershell Base64 字符串被截断为 36 个字符?
Why is my powershell Base64 String truncated to 36 characters?
我在 VSTS Build 中使用 PowerShell 来查询 VSTS API。我正在使用 PAT 进行身份验证。
但是,当我生成 Auth 字符串时,我发现它失败了。这是我的代码
$VstsAccessEmail = $Env:VstsAccessEmail
$VstsAccessToken = $Env:VstsAccessToken
$pair = "${VstsAccessEmail}:${VstsAccessToken}"
$base64 = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($pair))
Write-Host $base64
如果我在这里看到结果,我会看到实际授权字符串的前 36 个字符。我在我的机器上使用 Powershell 生成了字符串,我得到了全部 108 个字符。我暂时对此进行了硬编码,以便按照上述代码之后的以下步骤进行测试。
$base641 = "a2FuZ2thbi5nb3N3YW1pQHVuaXN5cy5jb206cHh4b25oaHBlNmtjb3g3aTRhdHZxMzdoNms2ZnpuNHhyaWhyZ2ozdGZ3ejRlNmxxxxXXXX=="
if($base64.length -ne 108){
$base64 = $base641
}
Write-Host "base64 is: $base64 "
这工作正常。最初,我认为这可能是 Writing to host 的问题。但是,如果我确实调用了 RestMethod 而没有更新硬编码方法,我会收到 401 Unauthorized。
请帮忙。
更新:
我发现了问题。我在构建变量中将 VstsAccessToken
设置为秘密。所以价值没有通过。使其不安全工作正常。
有人可以帮助如何将令牌保密吗?
已解决
使用 $Env:variable 不允许在变量保密时使用该值。但是,将它作为参数传递给 PowerShell 让代码读取它,尽管日志输出被屏蔽了。
这一段肯定是错的。我看到一件事肯定是错误的,另一件事可能是错误的。
$VstsAccessEmail = $Env:VstsAccessEmail
$VstsAccessToken = $Env:VstsAccessToken
$pair = "${VstsAccessEmail}:${VstsAccessToken}"
$base64 = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($pair))
$pair = "${VstsAccessEmail}:${VstsAccessToken}"
应该是 $pair = ":${VstsAccessToken}"
。不需要电子邮件地址,只需一个冒号,然后是身份验证令牌。
UTF8.GetBytes
可能是错误的。我总是使用 ASCII.GetBytes
.
使用 $Env:variable 不允许在变量保密时使用该值。但是,将它作为参数传递给 PowerShell 让代码读取它,尽管日志输出被屏蔽了。
我在 VSTS Build 中使用 PowerShell 来查询 VSTS API。我正在使用 PAT 进行身份验证。
但是,当我生成 Auth 字符串时,我发现它失败了。这是我的代码
$VstsAccessEmail = $Env:VstsAccessEmail
$VstsAccessToken = $Env:VstsAccessToken
$pair = "${VstsAccessEmail}:${VstsAccessToken}"
$base64 = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($pair))
Write-Host $base64
如果我在这里看到结果,我会看到实际授权字符串的前 36 个字符。我在我的机器上使用 Powershell 生成了字符串,我得到了全部 108 个字符。我暂时对此进行了硬编码,以便按照上述代码之后的以下步骤进行测试。
$base641 = "a2FuZ2thbi5nb3N3YW1pQHVuaXN5cy5jb206cHh4b25oaHBlNmtjb3g3aTRhdHZxMzdoNms2ZnpuNHhyaWhyZ2ozdGZ3ejRlNmxxxxXXXX=="
if($base64.length -ne 108){
$base64 = $base641
}
Write-Host "base64 is: $base64 "
这工作正常。最初,我认为这可能是 Writing to host 的问题。但是,如果我确实调用了 RestMethod 而没有更新硬编码方法,我会收到 401 Unauthorized。
请帮忙。
更新:
我发现了问题。我在构建变量中将 VstsAccessToken
设置为秘密。所以价值没有通过。使其不安全工作正常。
有人可以帮助如何将令牌保密吗?
已解决
使用 $Env:variable 不允许在变量保密时使用该值。但是,将它作为参数传递给 PowerShell 让代码读取它,尽管日志输出被屏蔽了。
这一段肯定是错的。我看到一件事肯定是错误的,另一件事可能是错误的。
$VstsAccessEmail = $Env:VstsAccessEmail
$VstsAccessToken = $Env:VstsAccessToken
$pair = "${VstsAccessEmail}:${VstsAccessToken}"
$base64 = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($pair))
$pair = "${VstsAccessEmail}:${VstsAccessToken}"
应该是$pair = ":${VstsAccessToken}"
。不需要电子邮件地址,只需一个冒号,然后是身份验证令牌。UTF8.GetBytes
可能是错误的。我总是使用ASCII.GetBytes
.
使用 $Env:variable 不允许在变量保密时使用该值。但是,将它作为参数传递给 PowerShell 让代码读取它,尽管日志输出被屏蔽了。