2016-08-29 7 views
0

私はこのライブラリを使用しています:Microsoft.Azure.ActiveDirectory.GraphClient クラス:ActiveDirectoryClientC#でAzure Active Directory Graphクライアントを使用して役割の割り当てを作成する方法は?

申し訳ありませんが、いくつかのサブスクリプションに「所有者」のアクセス権があります。それをどうやってやりますか?ありがとう

+0

あなたはこれまでに何を試みましたか? –

+0

フィリップ編集に感謝します。次のPowershellコマンドは、ジョブを実行します。 'New-AzureRmRoleAssignment -RoleDefinitionName Reader -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

フィリップ編集のおかげで! –

関連する問題