I have defined a (single-tenant) app in my Azure Active Directory over a year ago, and back then, I played around with the required permissions until everything seemed to work.
From back then until a few minutes ago, that app had two permissions on "Windows Azure Active Directory" visible in the portal at https://manage.windowsazure.com: "Read Directory Data" and "Sign in and read user profile".
![]()
But then I revoked them and clicked "Save":
![]()
I gave the AAD a few minutes for synchronization, before logging into Graph API again with that app's ClientID and Key and the corresponding TenantID, but I found that I could still read directory data.
Originally, I was debugging the opposite issue in another single-tenant app. The other app was created today and is configured the same as this one, with the same permissions ("Read Directory Data" and "Sign in and read user profile"),
but when using that app's ClientID and app key to read directory data, it always throws the error
System.Data.Services.Client.DataServiceClientException: {"odata.error":{"code":"Authorization_RequestDenied","message":{"lang":"en","value":"Insufficient privileges to complete
the operation."}}}
If any of the login information is wrong, the error returned is different (400 Bad Request or 401 Not Authorized), so login works, but it seems that the app doesn't have the required permissions to read the directory data.
While browsing the web I found that an app may need more permissions to be able to read directory data.
I cannot preclude that my first app once had these other permissions set and "revoked" again, so I had to think the unthinkable: Could it be that permissions to an app, once granted, are never really revoked again?
Further testing revealed: No, it's not as easy as that. Not only are they not revoked, for new apps, they are not set either. Even if I check all permissions on the new app, the "Insufficient privileges" error is still there:
![]()
![]()
Is this an issue in Azure, or what exactly am I doing wrong there?