When I want to get members from graph api from my application graph.windows.net/{aadDirectoryId}/users/{userId.Value}/$links/memberOf?api-version=1.6
I always get
Response: StatusCode: 403, ReasonPhrase: 'Forbidden', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Pragma: no-cache
ocp-aad-diagnostics-server-name: aVvd1R49Sg=
request-id: 67105ddc-2b5f-84bf-7ec43a4d3117
client-request-id: fb1ef66f-451357f08975abd4
x-ms-dirapi-data-contract-version: 1.6
ocp-aad-session-key: _XjEM7ooA1Emw_l6FjiyMwKqtoEPSWgxw-04c_nX785foVv6fGM_lBejApG_gJW2fXC_LBNrZRJRryuBIOO7_O1bF2oEEiWMvnW9Ywx71OP0NJ5gRyZDGlLyNsjmsDvu.42WXAH4v8FjbaSNvNtH1Nnkm3z5on0J5ZsptMguA52A
DataServiceVersion: 3.0;
Strict-Transport-Security: max-age=31536000; includeSubDomains
Access-Control-Allow-Origin: *
Duration: 853533
Cache-Control: no-cache
Date: Tue, 05 Mar 2019 14:01:17 GMT
Server: Microsoft-IIS/10.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Content-Length: 219
Content-Type: application/json; odata=minimalmetadata; streaming=true; charset=utf-8
Expires: -1
}
When I call this get from https://graphexplorer.azurewebsites.net/ everything is OK.
In azure AD I have set up permissions for api permission
Call code:
private static List<string> GetGroupsFromGraphAPI(ClaimsIdentity claimsIdentity)
{
_logger.Info($"Getting claims from Graph API for {claimsIdentity.Name}.");
List<string> groupObjectIds = new List<string>();
var aadClientId = ConfigurationManager.AppSettings["ida:ClientId"];
var aadSecret = ConfigurationManager.AppSettings["ida:ClientSecret"];
var aadDirectoryId = ConfigurationManager.AppSettings["ida:DirectoryId"];
ClientCredential credential = new ClientCredential(aadClientId, aadSecret);
AuthenticationContext authContext = new AuthenticationContext("https://login.microsoftonline.com/" + aadDirectoryId);
string accessToken;
try
{
_logger.Info($"Client ID: {aadClientId}");
_logger.Info($"Secret: {aadSecret}");
_logger.Info($"Directory id: {aadDirectoryId}");
var token = authContext.AcquireToken("https://graph.windows.net", credential);
_logger.Info($"Token: {token.ToString()}");
accessToken = token.AccessToken;
_logger.Info($"Get access token {accessToken}");
}
catch
{
_logger.Error("Cannot aquire token for Graph API.");
throw;
}
var userId = claimsIdentity.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier");
if (userId == null)
{
_logger.Warn($"No user ID to get group membership for. ({claimsIdentity.Name})");
return groupObjectIds;
}
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
HttpResponseMessage response;
try
{
var link =
$"https://graph.windows.net/{aadDirectoryId}/users/{userId.Value}/$links/memberOf?api-version=1.6";
_logger.Info($"GetAsync {link}");
response = client.GetAsync(link).Result;
}
catch
{
_logger.Error("Failed to load group membership for " + claimsIdentity.Name);
throw;
}
}
Directory.Read.All
permission requires an admin consent.. So please go and click onGrant admin consent for your directory
if you see it at the bottom of your page.. if you don't, then it means you're not an admin and need to ask an Administrator to grant consent for you.. either through portal or by using AdminConsent endpoint – Rohit Saigaldelegated permissions
.. i.e. user's permissions and hence it's not the same. – Rohit Saigal