Os pedidos para a API do MS Graph me dão "Solicitação de autorização negada - privilégios insuficientes para concluir a operação"
Tenho uma pergunta sobre a mensagem "Solicitação de autorização negada - privilégios insuficientes para concluir a operação" que continuo recebendo de minhas solicitações à API do Windows Graph.
Especificamente, estou trabalhando na nuvem do Azure. Eu tenho um aplicativo móvel iOS que chama uma API. Ativei "Autenticação para o Active Directory" no meu Portal.
Em seguida, no lado do cliente (iOS):
[self.todoService.client loginWithProvider:@"windowsazureactivedirectory"
controller:self
animated:YES
completion:^(MSUser *user, NSError *error) {
if(!error && user) {
[self refresh];
}
}]; //loginWithProvider
Então, retorna um objeto MSUser válido. Vejo o controlador de login na Web aparecer, faço login com meu un / pw e, em seguida, ele me permite acessar os dados da minha tabela fácil ... etc.
Agora, quero chamar uma API Fácil que eu criei no Azure chamadagetUserData. Portanto, basta inserir o código invokeAPI como este (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
Está tudo bem como a API é chamada e posso ver os dados da resposta.
No lado do servidor (Node JS), eu basicamente faço 3 coisas:
O primeiro é obter o ID do objeto de usuário do objeto de solicitação:
req.azureMobile.user.getIdentity().then((data) => {
//get user object ID
}
Segundo, faça uma solicitação parahttps://login.windows.net para obter um token de acesso com um nome de usuário / senha.
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
}
Recebo um monte de dados de volta, incluindo o token de acesso.
3º, faça um pedido parahttps://graph.windows.net/e forneça isso, token de acesso junto com meu ID de objeto de usuário:
var options = {
url: "https://graph.windows.net/" + tenant_domain + "/users/" + objectId + "?api-version=1.0",
method: 'GET',
headers: {
"Authorization": "Bearer " + access_token
}
};
Isto é para que eu possaDados do usuário. Agora, em uma Assinatura de teste separada, configurei todas as permissões básicas de leitura para o AAD e o Graph no meu gerenciamento do AAD. Consigo recuperar os dados completos do usuário da seguinte maneira:
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
}
No entanto, em outra assinatura, executei exatamente as mesmas etapas. Mesmo indo até a verificação de todas as permissões da seguinte forma:
Continuo recebendo a mensagem "Solicitação de autorização negada, privilégios insuficientes". O erro é nulo, então eu sei que tudo o resto passou corretamente.
Não consigo descobrir o porquê, porque tudo é processado e verifiquei todas as minhas permissões de AAD e Graph.
resultado do log:
-----corpo------
'{"odata.error": {"code": "Authorization_RequestDenied", "message": {"lang": "en", "value": "Privilégios insuficientes para concluir a operação."}}}'Obrigado por qualquer ajuda e aprecio o tempo de todos