VSTS构建在本地运行 - 错误:“Microsoft Internet Explorer。增强的安全配置”

时间:2017-09-08 10:49:46

标签: powershell internet-explorer azure-devops azure-pipelines tfs2017

我正在运行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 \ n \ n增强的安全配置   目前已在您的环境中启用。这种增强水平   安全性阻止我们的Web集成体验显示或   表现正确。要继续您的操作,请禁用   此配置或联系您的管理员。

我正在运行Windows 10。

我尝试了很多东西,包括:

  • 在Internet选项中关闭尽可能多的安全性。
  • Fresh Token
  • 将令牌转换为安全字符串
  • 转换为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)}

1 个答案:

答案 0 :(得分:1)

创建一个新的访问令牌并引用此代码通过PowerShell调用REST API:

$user = "[anything]"
$accessToken="[access token]"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$accessToken)))
...
Invoke-RestMethod -Uri $uri -Method Post -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Body $bodyJson

关于增强的安全性,存在类似的问题:

Enhanced Security Error while Visual Studio Team Services Rest API