Я пытаюсь изменить рабочий пример из интернета:
IAzure azure = Azure.Configure()
.Authenticate(credentials)
.WithSubscription(credentials.DefaultSubscriptionId)
в аутентификацию устройства Azure следующим образом:
AzureCredentials accessTokenCredentials = GetAzureAccessTokenCredentials(credentials,
AzureEndPointApi.Management,
environment);
IAzure az = Azure.Configure().Authenticate(accessTokenCredentials)
Это все еще работает, если мне не нужно вызывать какую-то функцию, которая использует API управления и Graph API вместе, как это:
private static async Task<IServicePrincipal> AddAccountToRoles(IAzure azureManagement, IAzure azureGraph, IActiveDirectoryApplication activeDirectoryApp)
{
var role = azureGraph.AccessManagement.ServicePrincipals.Define($"{activeDirectoryApp.Name}-contributor")
.WithExistingApplication(activeDirectoryApp)
.WithNewRoleInSubscription(BuiltInRole.Contributor, azureGraph.SubscriptionId);
var result = await role.CreateAsync();
return result;
}
CreateAsync вызывает как AP AP, так и API управления согласно Fiddler. Так что я полагаю, что для этого нужны два разных токена доступа (по одному для каждой службы), не так ли?
Итак, я изменил код на:
var restClient = RestClient
.Configure()
.WithBaseUri(AzureDelegatingHandler.GetBaseUri(environment, AzureEndPointApi.Management))
.WithEnvironment(environment)
.WithCredentials(GetAzureAccessTokenCredentials(credentials, AzureEndPointApi.Management, environment))
.WithBaseUri(AzureDelegatingHandler.GetBaseUri(environment, AzureEndPointApi.Graph))
.WithEnvironment(environment)
.WithCredentials(GetAzureAccessTokenCredentials(credentials, AzureEndPointApi.Graph, environment))
.Build();
IAzure azure = Azure
.Authenticate(restClient, credentials.TenantId)
.WithSubscription(credentials.DefaultSubscriptionId);
public static string GetBaseUri(AzureEnvironment environment, AzureEndPointApi azureEndPointApi)
{
switch (azureEndPointApi)
{
case AzureEndPointApi.Graph:
return environment.GraphEndpoint;
case AzureEndPointApi.Management:
return environment.ManagementEndpoint;
default:
throw new NotSupportedException(azureEndPointApi.ToString());
}
}
Но этот код обслуживает неверный токен доступа - не на основе базы конечных точек API REST uri.
Что я не прав?