Запросы к MS Graph API дают мне «Запрос авторизации отклонен - Недостаточно прав для завершения операции»
У меня есть вопрос о сообщении «Запрос авторизации отклонен - недостаточно прав для завершения операции», которое я продолжаю возвращать из своих запросов в Windows Graph API.
В частности, я работаю в облаке Azure. У меня есть мобильное приложение iOS, которое вызывает API. Я включил «Аутентификация для Active Directory» на моем портале.
Затем на стороне клиента (iOS):
[self.todoService.client loginWithProvider:@"windowsazureactivedirectory"
controller:self
animated:YES
completion:^(MSUser *user, NSError *error) {
if(!error && user) {
[self refresh];
}
}]; //loginWithProvider
Так возвращает действительный объект MSUser. Я вижу, что появляется веб-контроллер входа в систему, я вхожу в систему с помощью моего / pw, а затем он позволяет мне получить доступ к данным моего Easy Table ... и т. Д.
Теперь я хочу вызвать простой API, созданный в Azure, под названиемgetUserData, Следовательно, я просто вставляю код invokeAPI, как этот (iOS):
[self.todoService.client loginWithProvider:@"windowsazureactivedirectory"
controller:self
animated:YES
completion:^(MSUser *user, NSError *error) {
if(!error && user) {
//NSMutableDictionary * dict = [NSMutableDictionary dictionary];
//[dict setObject:@YES forKey:@"complete"];
NSLog(@"%s - %@", __FUNCTION__, user);
[self refresh];
[self.todoService.client invokeAPI:@"getUserData"
body:nil
HTTPMethod:@"POST"
parameters:nil
headers:nil
completion:^(id _Nullable result, NSHTTPURLResponse * _Nullable response, NSError * _Nullable error) {
NSLog(@"%s - API returned response! ", __FUNCTION__);
NSLog(@"%@", result); //TODO: user info here!! :D
}]; //invokAPI
} //if user returned from AAD login is valid
}]; //loginWithProvider
Все хорошо, так как API вызывается, и я вижу данные ответа.
На стороне сервера (Node JS) я делаю 3 вещи:
Во-первых, получить идентификатор объекта пользователя из объекта запроса:
req.azureMobile.user.getIdentity().then((data) => {
//get user object ID
}
2-й, сделайте запросhttps://login.windows.net получить токен доступа с именем пользователя / паролем.
var options = {
url: "https://login.windows.net/" + tenant_domain + "/oauth2/token?api-version=1.0",
method: 'POST',
form: {
grant_type: "client_credentials",
resource: "https://graph.windows.net",
client_id: clientID,
client_secret: key
}
};
req(options, function (err, resp, body) {
//get the result back
}
Я получаю целую кучу данных обратно, включая токен доступа.
3-й, сделайте запросhttps://graph.windows.net/и предоставьте это, токен доступа вместе с моим идентификатором объекта пользователя:
var options = {
url: "https://graph.windows.net/" + tenant_domain + "/users/" + objectId + "?api-version=1.0",
method: 'GET',
headers: {
"Authorization": "Bearer " + access_token
}
};
Это так, что я могуДанные пользователя, Теперь в отдельной тестовой подписке я установил все основные разрешения на чтение для AAD и Graph в своем управлении AAD. Я успешно вернул полные данные пользователя примерно так:
user = {
accountEnabled = 1;
assignedLicenses = (
);
assignedPlans = (
);
city = xxxxxxxxx;
country = xxxxxxxxxx;
department = Dev;
dirSyncEnabled = "<null>";
displayName = xxxxxx;
facsimileTelephoneNumber = "<null>";
givenName = hehe;
jobTitle = "iOS dev";
lastDirSyncTime = "<null>";
mail = "<null>";
mailNickname = "xxxxxxxxxx.com#EXT#";
mobile = "+xx xxx xxxx 3852";
objectId = "xxxxxxx-2c70-4aab-b261-3b2b97dc5c50";
objectType = User;
"odata.metadata" = "https://graph.windows.net/xxxxxxxxxx.onmicrosoft.com/$metadata#directoryObjects/Microsoft.WindowsAzure.ActiveDirectory.User/@Element";
"odata.type" = "Microsoft.WindowsAzure.ActiveDirectory.User";
otherMails = (
"[email protected]"
);
...etc
}
Однако в другой подписке я сделал те же самые шаги. Даже до проверки всех разрешений, например, так:
Я продолжаю получать сообщение "Запрос авторизации отклонен, недостаточно прав". Ошибка нулевая, поэтому я знаю, что все остальное прошло правильно.
Я не могу понять почему, потому что все проходит, и я проверил все свои разрешения AAD и Graph.
лог результат:
----- тело ------
'{"odata.error": {"code": "Authorization_RequestDenied", "message": {"lang": "en", "value": "Недостаточно прав для завершения операции."}}}'Спасибо за любую помощь и ценим время каждого