【发布时间】:2017-09-08 10:49:46
【问题描述】:
我正在运行 Windows 10 并制作一个脚本来处理/启动 VSTS 构建。
示例调用(覆盖测试属性):
$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI = "https://mytenancy.visualstudio.com/"
$env:SYSTEM_TEAMPROJECTID = "Project1"
$env:SYSTEM_DEFINITIONID = 5
#$env:SYSTEM_ACCESSTOKEN = "mytoken" - uncomment when running locally
$url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/definitions/$($env:SYSTEM_DEFINITIONID)?api-version=2.0"
Write-Host "URL: $url"
$definition = Invoke-RestMethod -Uri $url -Headers @{
Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
}
Write-Host "Definition = $($definition | ConvertTo-Json -Depth 100)"
"Authenticated"
此脚本在服务器上运行良好,但如果我取消注释 $env:SYSTEM_ACCESSTOKEN 并在本地运行,则会收到以下错误:
Microsoft Internet Explorer\u0026#39;s 增强的安全配置 当前已在您的环境中启用。这种增强的水平 安全性阻止我们的 Web 集成体验显示或 正确执行。要继续您的操作,请禁用 此配置或联系您的管理员。
我正在运行 Windows 10。
我尝试了很多方法,包括:
- 在 Internet 选项中尽可能关闭安全性。
- 新鲜令牌
- 将令牌转换为安全字符串
- 转换为 Base64 字符串,如this post 的答案中所述
如何在本地进行身份验证?
编辑(按照接受的答案)
接受的答案解决了问题。我认为这里的两个关键点是:
- 转换为 Base64 的正确编码
- 以这种方式(本地)运行时将身份验证从
Bearer更改为Basic。
最终代码:
$user = "[username]"
$accessToken="[token]"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$accessToken)))
$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI = "https://mytenancy.visualstudio.com/"
$env:SYSTEM_TEAMPROJECTID = "Project1"
$checkBuildUrl = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$($env:SYSTEM_TEAMPROJECTID)/_apis/build/builds/$($requestedBuildId)?api-version=2.0"
$buildStatus = Invoke-RestMethod -Uri $checkBuildUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
【问题讨论】:
标签: powershell internet-explorer azure-devops azure-pipelines