Получить все группы безопасности и пользователей, связанных с определенным определением сборки [Azure -Devops] - PullRequest
0 голосов
/ 31 марта 2020

Я просмотрел документацию, доступную по адресу - https://docs.microsoft.com/en-us/rest/api/azure/devops/security/?view=azure-devops-rest-5.1

Для определенного определения сборки я хочу иметь возможность получить доступ ко всем группам безопасности и пользователям, связанным с ним, через Сценарий code / powershell и вывод его, например, в файл json.

Любая помощь будет оценена! Я пытался завить несколько API, но не получил то, что мне нужно.

Спасибо!

1 Ответ

1 голос
/ 01 апреля 2020

Там один API не документирован. Попробуйте:

POST https://dev.azure.com/{org name}/_apis/Contribution/HierarchyQuery/project/{project name}?api-version=5.0-preview.1

Тело запроса:

{
  "contributionIds": [
    "ms.vss-admin-web.security-view-members-data-provider"
  ],
  "dataProviderContext": {
    "properties": {
      "permissionSetId": "33344d9c-fc72-4d6f-aba5-fa317101a7e9",
      "permissionSetToken": "{token}",
      "sourcePage": {
        "url": "https://dev.azure.com/{org name}/{project name}/_build?definitionId={build definition id}&_a=summary",
        "routeId": "ms.vss-build-web.pipeline-details-route",
        "routeValues": {
          "project": "{project name}",
          "viewname": "details",
          "controller": "ContributedPage",
          "action": "Execute",
          "serviceHost": "{org name}"
        }
      }
    }
  }
}

Некоторые ключевые моменты , на которые следует обратить внимание:

  • permissionSetId: Здесь 33344d9c-fc72-4d6f-aba5-fa317101a7e9 представляет собой фиксированное значение , которое представляет namespaceid безопасности сборки.

  • permissionSetToken: это токен, который может использоваться для получения информации о безопасности. Вы можете набрать команду , чтобы получить токены, которые вы должны использовать.

    az devops security permission list --id 33344d9c-fc72-4d6f-aba5-fa317101a7e9 --subject {your account} --output table --organization https://dev.azure.com/{org name} --project {project name}

  • url: Здесь * Значение 1035 * используется для указания системе, какую именно сборку вы хотите проверить. Просто замените соответствующий org name / project name / definition id на предоставленный образец URL.


Кроме того, я написал для вас сценарий PowerShell:

$token = "{token}"

$url="https://dev.azure.com/{org name}/_apis/Contribution/HierarchyQuery/project/{project name}?api-version=5.0-preview.1"

$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))

$context=@"
{
  "contributionIds": [
    "ms.vss-admin-web.security-view-members-data-provider"
  ],
  "dataProviderContext": {
    "properties": {
      "permissionSetId": "33344d9c-fc72-4d6f-aba5-fa317101a7e9",
      "permissionSetToken": "{token}",
      "sourcePage": {
        "url": "https://dev.azure.com/{org name}/{project name}/_build?definitionId={build definition id}&_a=summary",
        "routeId": "ms.vss-build-web.pipeline-details-route",
        "routeValues": {
          "project": "{project name}",
          "viewname": "details",
          "controller": "ContributedPage",
          "action": "Execute",
          "serviceHost": "{org name}"
        }
      }
    }
  }
}
"@

$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Post -Body $context -ContentType "application/json"

Write-Host "results = $($response.dataProviders.'ms.vss-admin-web.security-view-members-data-provider'.identities.displayname| ConvertTo-Json -Depth 100)"

enter image description here

...