Получение 401 несанкционированных попыток создать или обновить страницу вики с помощью скрипта Powershell - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь создать новую страницу в моей Wiki из конвейера сборки с созданными заметками о выпуске. В ответ я получаю эту ошибку: Invoke-WebRequest : The remote server returned an error: (401) Unauthorized.

Я просмотрел все ресурсы, которые нашел по этой теме, и все выглядит хорошо для меня.

Вот мой сценарий powershell:

# Get content of the generated release notes file
$content = [IO.File]::ReadAllText("$(build.artifactstagingdirectory)/release-notes-$(Build.BuildNumber).md")
$data = @{content=$content;} | ConvertTo-Json;

$params = @{uri = '$(WikiPath)';
  Method = 'PUT';
  Headers = @{Authorization = "Bearer $(System.AccessToken)" };
  ContentType = "application/json";
  Body = $data;
}

Write-Host "PUT $(WikiPath)"

$response = Invoke-WebRequest @params

Write-Host $response

Значение переменной WikiPath установлено на:
https://<server-ip>/PersonalProjects/Personal-KM/_apis/wiki/wikis/Personal-KM.wiki/pages?path=%2FRelease%20notes%2F$(Build.BuildNumber)&api-version=5.0

URI взят из официальной документации API . Я хотел бы создать подстраницы страницы Release notes, которая существует. Я попытался создать root страницу без успеха (?path=$(Build.BuildNumber)&api-version=5.0).

Обратите внимание, что я также пытался без .wiki в конце идентификатора вики.

Вот вывод шага сборки:

##[command]"C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ". 'C:\DevOpsAgent\_work\_temp\ebf68890-3544-4a8d-a415-4309983b1381.ps1'"
PUT https://<server-ip>/PersonalProjects/Personal-KM/_apis/wiki/wikis/Personal-KM.wiki/pages?path=%2FRelease%20notes%2F1.0.0.7&api-version=5.0
Invoke-WebRequest : The remote server returned an error: (401) Unauthorized.
At C:\DevOpsAgent\_work\_temp\ebf68890-3544-4a8d-a415-4309983b1381.ps1:26 char:13
+ $response = Invoke-WebRequest @params
+             ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebExc 
   eption
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

##[error]PowerShell exited with code '1'.

Ключевой момент 1: Я проверил Allow scripts to access the OAuth Token в задании агента:

Scripts token

Key point 2 : I have given the permissions 'Contribute' to the Build service account :

Build service permissions

Can you see anything wrong with my script or configuration ?

Edit 1 based on the comment from @MarioDietner :
I have tried to use a PAT instead of $(System.AccessToken), I get the same error (I am member of Project Collection Administrators and my PAT has Full access scope).
I also tried executing the script from my local computer (variables replaced) :

enter image description here

Edit 2 Я попытался запустить скрипт из Azure Pipelines на нашем производственном сервере, и он сработал с первой попытки. Я не знаю, что не так с нашими локальными Azure DevOps, но я сконцентрирую внимание на личности, а не на скрипте Powershell.

1 Ответ

0 голосов
/ 02 апреля 2020

, пожалуйста, обновите ваш скрипт и используйте закодированный токен в формате:

$PAT = "username@domain.com:PAT"
$encodedPat = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($PAT))

$params = @{uri = '$(WikiPath)';
  Method = 'PUT';
  Headers = @{Authorization = "Basic $encodedPat" };
  ContentType = "application/json";
  Body = $data;
}

Я следовал этому руководству для PowerShell и части кодирования, но добавил имя пользователя в PAT, чтобы получить его работает от SOAP пользовательского интерфейса. Попробуйте сначала с вашим пользователем, а затем примите использовать System.AccessToken. Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...