У меня есть веб-API .NET, который я использую для взаимодействия с API Azure DevOps для создания и обновления рабочих элементов на досках Azure DevOps различных организаций и проектов DevOps. В настоящее время я использую для аутентификации личный токен доступа (PAT) из своей учетной записи, но по понятным причинам я хочу исключить использование этого PAT.
Я зарегистрировал приложение в Azure и предоставил ему разрешения vso.work_full. Я также добавил в свое приложение службу аутентификации.
public class AzureDevOpsAuthService
{
private readonly IConfidentialClientApplication _clientApp;
public AzureDevOpsAuthService(string clientId, string clientSecret, string tenantId)
{
_clientApp = ConfidentialClientApplicationBuilder.Create(clientId)
.WithClientSecret(clientSecret)
.WithAuthority(new Uri($"https://login.microsoftonline.com/{tenantId}"))
.Build();
}
public async Task<string> GetAccessTokenAsync()
{
var result = await _clientApp.AcquireTokenForClient(new[] { "499b84ac-1321-427f-aa17-267ca6975798/.default" }).ExecuteAsync();
return result.AccessToken;
}
}
Это не сработало, и я получил следующую ошибку:
Microsoft.VisualStudio.Services.Common.VssServiceException: TF401444: войдите в систему хотя бы один раз как {TENANT ID} в веб-браузере, чтобы включить доступ к службе. в Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.HandleResponseAsync (ответ HttpResponseMessage, CancellationToken cancelToken) в Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.SendAsync (сообщение HttpRequestMessage, опция завершения HttpCompletionOption, Object userState, CancellationToken cancelToken) в Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.SendAsync[T](сообщение HttpRequestMessage, Object userState, CancellationToken cancelToken) в Microsoft.VisualStudio.Services.Location.Client.LocationHttpClient.GetConnectionDataAsync(ConnectOptions ConnectOptions, Int64 LastChangeId, CancellationToken cancelToken, Object userState)
Я не уверен, в чем проблема. Кажется, мне следует добавить Приложение в качестве Пользователя в организациях? Но я не могу его найти, когда пытаюсь добавить пользователя или назначить ему роль участника.
Вопросы:
Является ли использование приложения Azure с несколькими арендаторами лучшим способом?
Если вы хотите получить доступ к нескольким организациям, подключенным к разным идентификаторам Microsoft Entra ID, рекомендуется использовать приложение для нескольких клиентов.
Как добавить приложение в качестве пользователя к различным арендаторам Azure, чтобы иметь доступ к их доскам Azure DevOps для создания и обновления рабочих элементов?
Создайте субъект-службу, используя мультитенантную аутентификацию, и добавьте uri перенаправления https://www.microsoft.com
в TenantA.
Откройте указанный ниже URL-адрес в частном браузере, чтобы добавить его к другому клиенту, например TenantB.
https://login.microsoftonline.com/<TenantB ID>/oauth2/authorize?client_id=<Application ID of the app in TenantA>&response_type=code&redirect_uri=https%3A%2F%2Fwww.microsoft.com%2F
Он запросит авторизацию от имени организации, вы можете принять ее.
После того, как все вышеперечисленное будет выполнено, войдите на портал TenantB и перейдите в Enterprise Application, вы увидите его. Вы можете назначить ему необходимую роль.
Перейдите в организацию, подключенную к TenantB, найдите и добавьте приложение в свою организацию в разделе «Настройки организации» -> «Пользователи» -> «Добавить пользователей».
Если я не ошибаюсь, согласно клиентским библиотекам .NET для Azure DevOps вам понадобится существующий токен личного доступа для создания аутентифицированного подключения к Azure DevOps.