Создание маркера личного доступа Azure DevOps (PAT) с использованием C#

#c# #azure-devops #azure-devops-rest-api #personal-access-token

Вопрос:

Я пытаюсь создать PAT, используя новые возможности в TokensHttpClient. Однако я продолжаю получать исключение авторизации. Я использую свою учетную запись Microsoft, которая является администратором организации.

         VssCredentials creds = new VssClientCredentials();
        creds.Storage = new VssClientCredentialStorage();

        // Connect to Azure DevOps Services
        VssConnection connection = new VssConnection(_uri, creds);
        connection.ConnectAsync().SyncResult();
        var t = connection.GetClient<TokenAdminHttpClient>();

       //next line works as expected
        var tokens = t.ListPersonalAccessTokensAsync(connection.AuthorizedIdentity.SubjectDescriptor).Resu< 

        var tokenAdmin = connection.GetClient<TokensHttpClient>();
        PatTokenCreateRequest createRequest = new PatTokenCreateRequest();
        createRequest.DisplayName = "Niks_Api_Token";
        createRequest.Scope = "vso.work_full";
        createRequest.ValidTo = DateTime.Now.AddYears(1);
        //this is where authorization exception occurs
        var result = tokenAdmin.CreatePatAsync(createRequest).Resu<
 

Комментарии:

1. Похоже, вы используете приложение DevOps для доступа и создания пэтов. Пожалуйста, попробуйте использовать приложение AAD для создания пэтов, вы можете обратиться к этому документу , но в нем используется Python.

Ответ №1:

Чтобы управлять маркерами личного доступа с помощью API, необходимо пройти проверку подлинности с помощью маркера Azure AD. Маркеры Azure AD являются более безопасным механизмом аутентификации, чем использование PATS. Учитывая способность этого API создавать и отменять PAT, мы хотим гарантировать, что такая мощная функциональность предоставляется только разрешенным пользователям.

Пожалуйста, проверьте предварительные условия здесь.

введите описание изображения здесь

  1. Убедитесь, что ваша организация подключена к AAD, см. Здесь.
  2. Пожалуйста, зарегистрируйте приложение в Azure AD, убедитесь, что секрет клиента создан. Вы можете обратиться к этому документу. И добавьте разрешение Azure DevOps. введите описание изображения здесь
  3. Пример кода для получения маркера доступа Azure AD.
      public static async Task<string> GetAccessTokenAsyncByClientCredential()
     {
         IConfidentialClientApplication cca = ConfidentialClientApplicationBuilder.Create(<appId/clientId>)
            .WithTenantId(<tenantId>)
            .WithClientSecret(<clientSecret>)
            .Build(); 
    
          string[] scopes = new string[] { "499b84ac-1321-427f-aa17-267ca6975798/.default" };
    
         var result = await cca.AcquireTokenForClient(scopes).ExecuteAsync();
    
         return result.AccessToken;
     }
     

Комментарии:

1. Спасибо. Не могли бы вы поделиться кодом для ConfidentialClientApplicationBuilder?

2. Это определенный класс: docs.microsoft.com/en-us/dotnet/api/…