【问题标题】:VSTS build running locally - error: "Microsoft Internet Explorer. Enhanced Security Configuration"VSTS 构建在本地运行 - 错误:“Microsoft Internet Explorer。增强的安全配置”
【发布时间】: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


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-17
      • 1970-01-01
      • 2018-07-11
      • 2020-05-29
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      相关资源
      最近更新 更多