I get a 403 Forbidden response from Azure AD when I try to create an application using the Graph API:
private static void CreateApplicationViaPost(string tenantId, string clientId, string clientSecret) { var authContext = new AuthenticationContext( string.Format("https://login.windows.net/{0}", tenantId)); ClientCredential clientCred = new ClientCredential(clientId, clientSecret); AuthenticationResult result = authContext.AcquireToken( "https://graph.windows.net", clientCred); HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); const string json = @"{ displayName: ""My test app"", logoutUrl: ""http://logout.net"", identifierUris: [ ""http://identifier1.com"" ], replyUrls: [ ""http://replyUrl.net"" ] }"; HttpResponseMessage response = client.PostAsync( string.Format("https://graph.windows.net/{0}/applications?api-version=1.6", tenantId), new StringContent(json, Encoding.UTF8, "application/json")).Result; Console.WriteLine(response.ToString()); }
A client registered with Azure AD has all permissions: 
What am I missing?
EDIT: I registered my own client in Azure AD and gave him permission to write to Windows Azure Active Directory. This code creates the application in Azure AD:
private static void CreateApplicationViaPost(string tenantId, string clientId, string redirectUri) { var authContext = new AuthenticationContext( string.Format("https://login.windows.net/{0}", tenantId)); AuthenticationResult result = authContext.AcquireToken("https://graph.windows.net", clientId, new Uri(redirectUri), PromptBehavior.Auto); HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); const string json = @"{ displayName: ""My test app1"", homepage: ""http://homepage.com"", logoutUrl: ""http://logout1.net"", identifierUris: [ ""http://identifier11.com"" ], replyUrls: [ ""http://replyUrl1.net"" ] }"; HttpResponseMessage response = client.PostAsync( string.Format("https://graph.windows.net/{0}/applications?api-version=1.6", tenantId), new StringContent(json, Encoding.UTF8, "application/json")).Result; Console.WriteLine(response.ToString()); }