Вызов API-интерфейса Azure DevOps REST в приложении-демоне или длительной задаче - PullRequest
0 голосов
/ 08 января 2019

Я пишу Azure WebJob (долгосрочное задание) для прагматического создания WorkItems. Я создал приложение Azure AD (SPN) и добавил Visual Studio Team Services в соответствии с разрешениями API. Я создал консольное приложение для тестирования API, и вот код для получения токена и вызова DevOps API

static async Task RunAsync()
{
    AuthenticationContext authContext = new AuthenticationContext(authority); // https://login.microsoftonline.com/{tanent}
    ClientCredential clientCredential = new ClientCredential(clientId, appKey); // Azure APP ID and Key
    AuthenticationResult result = await authContext.AcquireTokenAsync(resourceId, clientCredential); // 499b84ac-1321-427f-aa17-267ca6975798

    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);

    HttpResponseMessage response = await httpClient.GetAsync(baseAddress + "/_apis/wit/workitemtypes?api-version=5.1-preview.2"); // https://dev.azure.com/{org}/{project}

    if (response.IsSuccessStatusCode)
    {
        string s = await response.Content.ReadAsStringAsync();
        Console.WriteLine(s);
    }
}

Вместо ответа JSON (список типов рабочих элементов) я получаю вывод HTML с заголовком «Службы Azure DevOps | Вход». Поскольку это фоновый процесс, я не могу попросить пользователя ввести логин. Могу ли я сделать это так? Это поддерживается?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Могу ли я сделать это? Это поддерживается?

Краткий ответ: нет .

Во время запроса разрешения для службы Azure Devops мы могли обнаружить, что не поддерживается разрешение приложения, единственным способом является разрешение делегата. Зарегистрированный пользователь обязателен. Дополнительные сведения о типе разрешения Azure AD см. В этом документе .

.

Делегированные разрешения - используются приложениями, в которых присутствует зарегистрированный пользователь . Для этих приложений пользователь или администратор соглашаются с разрешениями, которые запрашивает приложение, и приложению делегируется разрешение действовать как вошедший в систему пользователь при совершении вызовов API. В зависимости от API пользователь, возможно, не сможет напрямую согласиться с API и вместо этого потребует от администратора предоставить «согласие администратора».

enter image description here

Как отметил Эриаван Кусумавардхоно, вы можете использовать способ PAT для вызова REST API Azure DevOps. Для получения дополнительной информации вы можете обратиться к этому документу .

0 голосов
/ 08 января 2019

Вы используете проверку подлинности REST API Azure DevOps по умолчанию и использует модель проверки подлинности OAuth 2.0.

Если вам нужно устранить обратные вызовы и проверку подлинности OAuth из входа в Azure DevOps, используйте вместо этого PAT Azure DevOps PAT (токен личного доступа).

Создайте PAT для учетной записи, которая будет вызывать API, и настройте код, который вызывает REST API, в соответствии с официальной документацией Microsoft: Создание токена личного доступа DevOps Azure

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