对MS Graph API的请求使我“授权请求被拒绝 – 没有足够的权限来完成操作”

我有一个关于“授权请求被拒绝 – 没有足够的权限来完成操作”的消息,我不断从我的请求回到WindowsgraphicsAPI。

具体来说,我正在使用Azure云。 我有一个调用API的iOS移动应用程序。 我在我的Portal中打开了“Active Directory的身份validation”。

然后,在客户端(iOS)上:

[self.todoService.client loginWithProvider:@"windowsazureactivedirectory" controller:self animated:YES completion:^(MSUser *user, NSError *error) { if(!error && user) { [self refresh]; } }]; //loginWithProvider 

所以返回一个有效的MSUser对象。 我看到networkinglogin控制器出现,我用我的un / pwlogin,然后让我访问我的Easy Table的数据…等等。

现在,我想调用我在Azure中创build的一个名为getUserData的Easy API。 因此,我只需像这样插入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),我基本上做了三件事情:

第一是从请求对象中获取用户对象ID:

 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/ ,并提供这个访问令牌以及我的用户对象ID:

 var options = { url: "https://graph.windows.net/" + tenant_domain + "/users/" + objectId + "?api-version=1.0", method: 'GET', headers: { "Authorization": "Bearer " + access_token } }; 

这是我可以用户数据 。 现在,在单独的testing订阅中,我为AADpipe理中的AAD和Graph设置了所有基本读取权限。 我成功地获取用户的完整数据,如下所示:

 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 = ( "xxxxxxxxxxxx@gmail.com" ); ...etc } 

但是,在另一个订阅中,我做了完全相同的步骤。 甚至可以像检查所有的权限一样:

在这里输入图像描述

我不断收到“授权请求被拒绝,权限不足”消息。 错误是空的,所以我知道一切正常。

我无法弄清楚为什么,因为一切都经过了,我检查了我所有的AAD和图表权限。

logging结果:

– – -身体 – – –

'{“odata.error”:{“code”:“Authorization_RequestDenied”,“message”:{“lang”:“en”,“value”:“没有足够的权限来完成操作。

感谢任何帮助,并感谢大家的时间

您可以尝试将您使用的AD应用程序的angular色升级到pipe理员权限。 在PowerShell运行以下命令:

 Connect-MsolService $ClientIdWebApp = '{your_AD_application_client_id}' $webApp = Get-MsolServicePrincipal –AppPrincipalId $ClientIdWebApp #use Add-MsolRoleMember to add it to "Company Administrator" role). Add-MsolRoleMember -RoleName "Company Administrator" -RoleMemberType ServicePrincipal -RoleMemberObjectId $webApp.ObjectId