【发布时间】:2020-10-14 12:34:44
【问题描述】:
我尝试创建一个应用程序,另一家公司/租户中的用户可以使用该应用程序访问他/她的 OneDrive 存储。但是失败了。非常感谢有人能告诉我我犯了什么错误或哪些步骤。
(我搜索了帖子,似乎与此处报告的问题不同。)
详情如下: 租户 X 中的用户 (user01@company.com) 希望使用服务/系统(由租户 Y 开发)访问他/她 One Drive 存储中的文件。
1.)租户 Y 已经获得 Azure 服务并订阅了 Office 365 服务(因为 One Drive API 需要 SPO 许可证)。
2.) 在租户 Y 中使用 AAD,我将用户的电子邮件 (use01@company.com) 添加到活动目录 (AAD) 中作为来宾用户,并且用户已收到通知电子邮件并接受它。
3.)在租户 Y 中使用 AAD,我注册了一个新应用程序,从 支持的帐户类型中选择了任何组织目录中的帐户选项> 部分,设置重定向 URI。
4.) 为 Graph API(如 Files.ReadWrite 和 Files.ReadWriteAll)添加了委派的 API 权限,并获得批准新添加的权限请求。
5.) 为应用程序创建了一个新的客户端密码。
6.) 有了应用程序的租户 ID、客户端 ID 和客户端密码,现在我可以为用户 (user01@company.com) 启动 OAuth2 身份验证流程。最后,我得到了这个用户的访问令牌。
7.) 有了访问令牌,就可以获取用户的个人资料https://graph.microsoft.com/v1.0/me
8.) 对于此请求,它会抱怨 401 Unauthorized 错误:https://graph.microsoft.com/v1.0/me/drive。 (顺便说一下,这样的请求对于同一个租户Y的用户来说是没有问题的)
回复如下:
HTTP/1.1 401 Unauthorized
Cache-Control: private
Content-Type: application/json
request-id: ffef8bc9-11e7-4d07-9df3-e3cee81ef7b2
client-request-id: ffef8bc9-11e7-4d07-9df3-e3cee81ef7b2
x-ms-ags-diagnostic: {"ServerInfo":{"DataCenter":"East Asia","Slice":"SliceC","Ring":"4","ScaleUnit":"002","RoleInstance":"AGSFE_IN_19"}}
Strict-Transport-Security: max-age=31536000
Date: Wed, 24 Jun 2020 07:13:00 GMT
Content-Length: 249
{
"error": {
"code": "accessDenied",
"message": "There has been an error authenticating the request.",
"innerError": {
"date": "2020-06-24T07:13:01",
"request-id": "ffef8bc9-11e7-4d07-9df3-e3cee81ef7b2"
}
}
}
- 已编辑:07/02 ---------------------------------------
附加请求以获取访问令牌:
2.) User01@company.com 登录并批准授权请求,本地http服务器将获取授权码。
3.) 发送 POST 请求到:https://login.microsoftonline.com/{tenant-id-of-TenantY}/oauth2/v2.0/token,请求参数在正文中获取访问令牌,如链接中的图像。 screenshot of the POST request
4.) 使用结果访问令牌发送目标 Graph API 请求。结果就是这张图。Result of the /me/drive API
【问题讨论】:
标签: azure azure-active-directory microsoft-graph-api