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

Я пытаюсь создать 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).Result; 

        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).Result;

1 ответ

Чтобы управлять токенами личного доступа с помощью API , необходимо пройти аутентификацию с помощью токена Azure AD . Токены Azure AD - более безопасный механизм проверки подлинности, чем использование PAT. Учитывая способность этого 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;
     }
    
Другие вопросы по тегам