2016-08-29 1 views
0

Я использую эту библиотеку: Microsoft.Azure.ActiveDirectory.GraphClient класс: ActiveDirectoryClient.Как создать назначения роли с использованием Azure Active Directory Graph client в C#?

Я хотел бы предоставить приложение (у меня есть приложение) «Владелец» для доступа к какой-либо подписке. Как мне это сделать? Спасибо

+0

Что вы делали до сих пор? –

+0

Спасибо за редактирование Philippe. Ниже Powershell команда выполняет задание: 'New-AzureRmRoleAssignment -RoleDefinitionName чтение -ServicePrincipalName $ azureAdApplication.ApplicationId.Guid' Однако, использующая старые вызовы управления стилем. Я не могу придумать сопоставление вызовов старого стиля к новым вызовам управления ресурсами –

ответ

1

Вся эта предпосылка неверна. GraphClient не является подходящим клиентом для управления такими полномочиями. Соответствующая библиотека API для этого - Microsoft.Azure.Management.Authorization и класс AuthorizationManagementClient.

Я выложу дополнительные примечания о фактической последовательности вызовов.

*** Обновление ***********

Как и было обещано, вот пример кода:

public static async Task<IServicePrincipal> GetServicePrincipalAsync(string accessToken, string tenantId, string clientId) 
    { 
     var graphClient = NewActiveDirectoryClient(accessToken, tenantId); 
     var matches = await graphClient.ServicePrincipals.Where(sp => sp.AppId == clientId).ExecuteAsync(); 
     return matches.CurrentPage.ToList().FirstOrDefault(); 
    } 
    private static ActiveDirectoryClient NewActiveDirectoryClient(string accessToken, string tenantId) 
    { 
     TaskCompletionSource<string> tcs = new TaskCompletionSource<string>(); 
     tcs.SetResult(accessToken); 
     return new ActiveDirectoryClient(
      new Uri($"{GraphApiBaseUrl}{tenantId}"), 
      async() => { return await tcs.Task; }); 
    } 

Прежде всего, необходимо получить ObjectId доверителя вы хотите Добавить. В случае ServicePricipal у меня есть функция, которая получает ее из каталога, например:

Затем, используя это и область («/ subscriptions/{my_subscription_id}», для всей подписки), вы можете создать RoleAssignment:

public static async Task AssignRoleToPrincipalAsync(
     string accessToken, 
     string subscriptionId, 
     string scope, 
     string roleName, 
     string principalObjectId) 
    { 
     using (var client = NewAuthorizationManagementClient(accessToken, subscriptionId)) 
     { 
      RoleDefinition roleDef = (await FindRoleDefinitionAsync(accessToken, subscriptionId, scope, roleName)).FirstOrDefault(); 
      if (roleDef == null) 
       throw new Exception($"Role was not found: {roleName}"); 
      var props = new RoleAssignmentProperties() 
      { 
       PrincipalId = principalObjectId, 
       RoleDefinitionId = roleDef.Id 
      }; 
      await client.RoleAssignments.CreateAsync(scope, Guid.NewGuid().ToString("N"), props); 
     } 
    } 

    private static AuthorizationManagementClient NewAuthorizationManagementClient(string accessToken, string subscriptionId) 
    { 
     return new AuthorizationManagementClient(new TokenCredentials(accessToken)) { SubscriptionId = subscriptionId}; 
    } 
+0

Спасибо за изменения Philippe! –

Смежные вопросы