Используйте git диспетчер учетных данных, чтобы получить azure DevOps API вместо токена личного доступа - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь получить git azure DevOps api, чтобы получить информацию о репозиториях и ветвях в js.

Для этого я сделал небольшое приложение со следующим кодом:

$(document).ready(function() {
    var personalToken = btoa(':'+'<personnalAccessToken>');

    fetch('https://dev.azure.com/<company>/<project>/_apis/git/repositories?api-version=5.1', {
        method: 'GET',
        headers: {
          'Content-Type': 'application/json'
          'Authorization': 'Basic '+ personalToken
        }
    }).then(function(response) {
        return response.json();
    }).then(function(repositories) {
        console.log("There are "+repositories.count+" repositories");
    }).catch(function(error) {
        console.log('Fetch error: ' + error.message);
    });

Этот код отлично работает, но, как вы можете видеть, мой личный токен AccessToken написан прямо внутри кода ... что действительно плохо ...

Когда я использую git в командной строке мне не нужно указывать какие-либо учетные данные, потому что я использую git диспетчер учетных данных для windows. Это означает, что мой personnalAccessToken уже хранится, кэшируется и автоматически используется каждый раз, когда я использую команду git, например clone, et c.

Итак, я хотел бы, чтобы мой код js использовал то же самое , Я хотел бы, чтобы он автоматически использовал мои сохраненные учетные данные для получения api без необходимости устанавливать мой токен личного доступа в коде.

Я уже много часов искал, но не могу узнать, возможно ли это.

Ответы [ 2 ]

1 голос
/ 25 июня 2020

Если у вас есть сценарий, настроенный в Azure Runbook, вы можете установить его как зашифрованную переменную там и заставить его извлекать его оттуда перед запуском, а не напрямую записывать в код.

$encryptedPatVarName = "ADO_PAT"
$adoPat = Get-AutomationVariable -Name $encryptedPatVarName
$adoPatToken = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($adoPat)"))
$adoHeader = @{authorization = "Basic $adoPatToken"}

Это его версия для Powershell. Я видел, как некоторые люди делали это с другими

1 голос
/ 27 мая 2020

Я уже много часов искал, но не могу узнать, возможно ли это.

Извините, но насколько я знаю, это невозможно . Способ вызова Rest API аналогичен использованию Invoke-RestMethod для вызова rest api в Powershell. В обоих этих двух сценариях ios процесс будет пытаться получить PAT для аутентификации в текущем сеансе / контексте и даже не будет пытаться искать кеш в Git Credential Manager.

Вы должны различать guish разницу между доступом к Azure службе Devops через Rest API и по коду:

Rest API :

POST https://dev.azure.com/{organization}/{project}/{team}/_apis/wit/wiql?api-version=5.1

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

{
  "query": "Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.WorkItemType] = 'Task' AND [State] <> 'Closed' AND [State] <> 'Removed' order by [Microsoft.VSTS.Common.Priority] asc, [System.CreatedDate] desc"
}

Соответствующий код в C#:

VssConnection connection = new VssConnection(new Uri(azureDevOpsOrganizationUrl), new VssClientCredentials());
            //create http client and query for resutls
WorkItemTrackingHttpClient witClient = connection.GetClient<WorkItemTrackingHttpClient>();
Wiql query = new Wiql() { Query = "SELECT [Id], [Title], [State] FROM workitems WHERE [Work Item Type] = 'Bug' AND [Assigned To] = @Me" };
WorkItemQueryResult queryResults = witClient.QueryByWiqlAsync(query).Result;

Возможно, вы можете рассмотреть возможность использования ограниченного PAT, ограничить его область действия только для кода:

enter image description here

Я знаю, что существует другой Механизм аутентификации :

Для Interactive JavaScript проект: ADAL JS и Клиентские библиотеки, поддерживаемые Microsoft .

Вы можете попробовать, но я не уверен, работает ли он для вас, так как вы вы не используете настоящий код для доступа к службе Azure Devops ... Надеюсь, это поможет:)

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