Когда я хочу получить членов из API api из моего приложениявсегда получаю
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
}
Когда я называю это получаем из https://graphexplorer.azurewebsites.net/ все в порядке.
В Azure AD я настроил разрешения для разрешения API
Код вызова:
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;
}
}