Создание пользовательского подключения к службе Azure DevOps для остальных API

У меня есть REST API в Интернете, защищенный с помощью Azure AD и требуемый заголовок (пользовательский APIKey). Вы можете вызвать этот API в примере с почтальоном, используя поток учетных данных клиента. Это все работает нормально.

Сейчас я разрабатываю пользовательское расширение Azure DevOps, которое показывает информацию, возвращенную из этого API, в форме рабочего элемента ADO. Я могу вызвать API (если я удалю безопасность из API) из расширения через универсальное подключение к службе. Теперь я хочу, чтобы безопасность работала.

Поэтому я хочу создать пользовательское подключение к службе, которое получит токен доступа из Azure AD, используя ClientID и ClientSecret (поток учетных данных клиента). Когда у меня это работает, я могу безопасно вызывать свой API. Также как добавить обязательный заголовок к вызову API? Мне нужно добавить заголовок как поле к сервисному соединению, верно? Итак, я думаю, что в итоге я получаю экземпляр пользовательского подключения к службе, который запрашивает TenantId, ClientId, Client Secret, Audience/Scope, List of headers (name/value).

В качестве дополнительной справочной записи в блоге я использовал эту: https://thingswithcode.blogspot.com/2019/07/using-azure-devops-service-connections.html

{
    "id": "api-service-connection",
    "description": "Service connection for api",
    "type": "ms.vss-endpoint.service-endpoint-type",
    "targets": [
      "ms.vss-endpoint.endpoint-types"
    ],
    "properties": {
      "name": "Call API",
      "displayName": "Call API",
      "icon": "img/world.png",
      "url": {
        "displayName": "API Url",
        "value": "https://path-to-api",
        "helpText": "Url of the API to connect to."
      },
      "inputDescriptors": [
        {
          "id": "api-key",
          "name": "API Key",
          "description": "The value for the header 'ApiKey'",
          "inputMode": "textbox",
          "isConfidential": false,
          "validation": {
            "isRequired": true,
            "dataType": "string"
          }
        }
      ],
      "authenticationSchemes": [
        {            
          "type": "ms.vss-endpoint.endpoint-auth-scheme-oauth2" // this is wrong...
        }
      ],
      "headers": [
        {
          "name": "ApiKey",
          "value": "{{endpoint.api-key}}"
        }
      ],
      "helpMarkDown": "<a href=\"" target=\"_blank\"><b>Learn more</b></a>"
    }
  }

Спасибо


person LockTar    schedule 22.04.2021    source источник