- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我对“授权请求被拒绝 - 权限不足,无法完成操作”消息有疑问,我不断从对 Windows Graph API 的请求中收到该消息。
具体来说,我在 Azure 云中工作。我有一个调用 API 的 iOS 移动应用程序。我已在我的门户中打开“Active Directory 身份验证”。
然后,在客户端(iOS):
[self.todoService.client loginWithProvider:@"windowsazureactivedirectory"
controller:self
animated:YES
completion:^(MSUser *user, NSError *error) {
if(!error && user) {
[self refresh];
}
}]; //loginWithProvider
因此返回一个有效的 MSUser 对象。我看到 Web 登录 Controller 出现,我使用我的 un/pw 登录,然后它允许我访问 Easy Table 的数据...等等。
现在,我想调用我在 Azure 中创建的名为 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
}
第二,向 https://login.windows.net提出请求 使用用户名/密码获取访问 token 。
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
}
我收到了一大堆数据,包括访问 token 。
第三,向https://graph.windows.net/提出请求,并提供此访问 token 以及我的用户对象 ID:
var options = {
url: "https://graph.windows.net/" + tenant_domain + "/users/" + objectId + "?api-version=1.0",
method: 'GET',
headers: {
"Authorization": "Bearer " + access_token
}
};
这样我就可以用户数据。现在,在单独的测试订阅中,我在 AAD 管理中设置了 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 = (
"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="433b3b3b3b3b3b3b3b3b3b3b3b03242e222a2f6d202c2e" rel="noreferrer noopener nofollow">[email protected]</a>"
);
...etc
}
但是,在另一个订阅中,我执行了完全相同的步骤。甚至像这样检查所有权限:
我不断收到“授权请求被拒绝,权限不足”消息。错误为空,所以我知道其他一切都正确完成。
我不明白为什么,因为一切都在处理,并且我检查了所有 AAD 和 Graph 权限。
日志结果:
-----正文------
感谢您的帮助,感谢大家的时间
最佳答案
您可以尝试将您使用的AD应用程序的角色升级为管理员权限。在 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
关于ios - 对 MS Graph API 的请求给了我 "Authorization Request Denied - Insufficient privileges to complete the operation",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37893089/
我正在尝试从我的谷歌驱动器下载电子表格。我正在关注 this reference并且在许可方面遇到问题。我从 https://www.googleapis.com/auth/drive.file 开始
我正在尝试使用以下命令将一个目录从我的虚拟机复制到我本地机器的桌面: gcloud compute scp --recurse instance-1:~/directory ~/Desktop/ 我尝
我正在尝试获取Youtube的评论,但它引发了此异常- {“Google.Apis.Requests.RequestError \ r \ n权限不足:请求的身份验证范围不足。[403] \ r \
我试图用 jmap 捕获 tomcat 进程转储,但是我得到错误“内存不足或附加权限不足”,显然有足够的内存,并且当前登录用户在角色本地管理员组中。如果我以管理员身份运行 cmd 命令,它仍然失败。
为了测试我们的应用程序,我需要插入/更新谷歌日历事件并验证边缘情况,比如 session 邀请是否超过 30 天,它不应该显示给最终用户。我正在为单个 gmail id testaccount@.co
我正在使用这个 endpoint : get_media(bucket=*, object=*, ifGenerationNotMatch=None, generation=None, ifMeta
我正在尝试将 Stripe 的 Connect 实现到我的应用程序中。我已经完成了数小时的研究和试错方法调试,现在我遇到的情况是没有出现技术错误,但出现错误: Insufficient funds i
我正在尝试在我的应用程序中使用静默推送通知,它似乎可以正常工作一两个小时,但在此期间之后将不会发送通知,并且我收到“高优先级推送:bundleID-资源不足”警告。任何人都知道可能是什么问题? 最佳答
我正在尝试使用以下命令添加以下条目: ldapadd -Y EXTERNAL -H ldapi:/// -f server5_ldap.ldif server5_ldap.ldif 的内容如下: #
我已完成描述的 Azure Cats&Dogs 教程 here我在 AKS 中启动应用程序的最后一步中遇到错误。 Kubernetes 报告我的 Pod 不足,但我不确定为什么会出现这种情况。几周前我
这是我在这里的第一个问题。 我一直想用流行的 IMDb 数据集创建一个数据集用于学习目的。目录如下: .../train/pos/和 .../train/neg/。我创建了一个函数,它将文本文件与其标
当我使用 gradle 构建时,它以信息失败: OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000788800000
我正在执行 https://hub.docker.com/r/apache/nifi 的“独立实例,双向 SSL”部分中的步骤。 .但是,当我访问 NiFi 页面时,我的用户权限不足。以下是我正在使用
我在向部署在我的 Google Cloud Kubernetes 集群中的 Spring Boot 应用程序发送请求时遇到困难。我的应用程序收到一张照片并将其发送到 Google Vision API
我开发了第一个 Firestore 应用程序并没有真正意识到我没有构建权限模型,事实上我后来用 bolt 固定了它。 (如果这是问题的根源,我愿意接受有关权限最佳实践和/或如何更好地实现权限规则的反馈
我在 Ubuntu 上遇到 Apache-Karaf 3.0.0 的问题我想用命令“start”启动一个包。但我收到以下错误: Error executing command: Insufficien
我在 Ubuntu 12.04 上新部署服务器程序“MyServer”时遇到问题。该程序在第一台机器上运行良好。 但是在新机器上,MyServer程序在mysql_init()期间返回异常:“内存不足
所以我刚开始用 CUDA 编写,遵循 An Even Easier Introduction to CUDA指导。到目前为止,一切都很好。然后我想实现一个神经网络,这让我对函数 cudaMallocM
我正在用 c++ 风格的 opencv 2.3 开发一个项目。 在应用程序中,我加载视频并处理每一帧,并对 Mat 对象做一些事情。一段时间后,我收到内存不足错误。 我像这样捕捉帧: FCapture
我正在使用 web3.js v1.0.0-beta.34 和 nodeJS v9.11.2 在 Kovan 测试网上执行智能合约。同样的方法适用于我在 Ropsten 上使用另一个智能合约。这是我通过
我是一名优秀的程序员,十分优秀!