2017-08-10 6 views
0

Azure ADでMicrosoft Graphを使用して(コンソール/サービスから)ログインせずにユーザーを作成するにはどうすればよいですか?Microsoft Graphを使用してAzure Active Directoryにユーザーを作成するためのC#コンソールアプリケーション

すべての例がありますので、最初にADアカウントを使用してログインする必要があります。

これでアクセスが拒否されます。

class Program { 
    static void Main (string[] args) { 

     Create().Wait(); 
     Console.ReadLine(); 
    } 

    private static async Task Create() { 
     var graph = new GraphServiceClient (new AzureAuthenticationProvider()); 
     try { 
      var users = await graph.Users.Request().GetAsync(); 
      int requestNumber = 1; 
      while (users.Count > 0) { 
       Console.WriteLine ("Request number: {0}", requestNumber++); 
       foreach (var u in users) { 
        Console.WriteLine ("User: {0} ({1})", u.DisplayName, 
         u.UserPrincipalName); 
       } 

       if (users.NextPageRequest != null) { 
        users = await users.NextPageRequest.GetAsync(); 
       } else { 
        break; 
       } 
      } 
     } catch (ServiceException x) { 
      Console.WriteLine ("Exception occured: {0}", x.Error); 
     } 
    } 

} 

public class AzureAuthenticationProvider : IAuthenticationProvider { 
    public async Task AuthenticateRequestAsync (HttpRequestMessage request) { 

     string clientId = "IDHERE"; 
     string clientSecret = "SECRETHERE"; 

     string tenantName = "somedomain.com"; 
     string authString = "https://login.microsoftonline.com/" + tenantName; 

     AuthenticationContext authContext = new AuthenticationContext (authString, false); 

     ClientCredential creds = new ClientCredential (clientId, clientSecret); 

     AuthenticationResult authResult = await authContext.AcquireTokenAsync ("https://graph.microsoft.com/", creds); 

     request.Headers.Add ("Authorization", "Bearer " + authResult.AccessToken); 
    } 
} 
+0

(https://stackoverflow.com/help/mcve)[、最小完全、かつ検証例を作成する方法]を参照してください –

答えて

2

OK、ここにあります!私はこれを理解するために半日を過ごしましたが、今はうまくいきます。

Azure Portal - > AD Section - >新しいアプリケーションを登録する(Web App/API)に移動し、新しいキーを作成して保存します。

必要な権限:

  • アプリケーション権限
    • 読むと
  • 代理アクセス権(私はこれは問題ではありませんだと思う)
    • アクセスディレクトリのディレクトリデータを書き込みますログインしたユーザーとして
    • その後
    • 読むすべてのユーザーの基本的なプロフィール
    • ログインして読むユーザープロファイル

必要なアクセス許可のブレードからの+ボタンを追加に近いトップメニューで付与アクセス許可]をクリックします。

その後のコードは、このようなものです:

class Program 
{ 
    static void Main(string[] args) 
    { 

     Create().Wait(); 
     Console.ReadLine(); 
    } 


    private static async Task Create() 
    { 
     var graph = new GraphServiceClient(new AzureAuthenticationProvider()); 
     try 
     { 
      var users = await graph.Users.Request().GetAsync(); 
      int requestNumber = 1; 
      while (users.Count > 0) 
      { 
       Console.WriteLine("Request number: {0}", requestNumber++); 
       foreach (var u in users) 
       { 
        Console.WriteLine("User: {0} ({1})", u.DisplayName, 
         u.UserPrincipalName); 
       } 

       if (users.NextPageRequest != null) 
       { 
        users = await users.NextPageRequest.GetAsync(); 
       } 
       else 
       { 
        break; 
       } 
      } 
     } 
     catch (ServiceException x) 
     { 
      Console.WriteLine("Exception occured: {0}", x.Error); 
     } 
    } 

} 

internal class AppModeConstants 
{ 
    public const string ClientId = "YOUR_CLIENT_ID_HERE"; 
    public const string ClientSecret = "YOUR_SECRET_HERE"; 
    public const string TenantName = "YOUR_TENANT_NAME_HERE"; //somedomain.com 
    public const string TenantId = "YOUR_TENANT_ID_HERE"; 
    public const string AuthString = GlobalConstants.AuthString + TenantName; 
} 


internal class GlobalConstants 
{ 
    public const string AuthString = "https://login.microsoftonline.com/"; 
    public const string ResourceUrl = "https://graph.microsoft.com"; 
    public const string GraphServiceObjectId = "00000002-0000-0000-c000-000000000000"; 
} 

public class AzureAuthenticationProvider : IAuthenticationProvider 
{ 
    public async Task AuthenticateRequestAsync(HttpRequestMessage request) 
    {   


     AuthenticationContext authContext = new AuthenticationContext(AppModeConstants.AuthString,false); 

     ClientCredential creds = new ClientCredential(AppModeConstants.ClientId, AppModeConstants.ClientSecret); 

     AuthenticationResult authResult = await authContext.AcquireTokenAsync(GlobalConstants.ResourceUrl,creds); 

     request.Headers.Add("Authorization", "Bearer " + authResult.AccessToken); 
    } 
} 
関連する問題