#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, мы хотим гарантировать, что такая мощная функциональность предоставляется только разрешенным пользователям.
Пожалуйста, проверьте предварительные условия здесь.
- Убедитесь, что ваша организация подключена к AAD, см. Здесь.
- Пожалуйста, зарегистрируйте приложение в Azure AD, убедитесь, что секрет клиента создан. Вы можете обратиться к этому документу. И добавьте разрешение Azure DevOps.
- Пример кода для получения маркера доступа 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/…