是否可以设置一个可供不同 Azure 帐户/目录上的用户使用的单个“本机应用程序”,以便他们可以从 Office 365 Sharepoint Online 获取数据?
我们可以使用“Web 应用程序”来实现此功能,因为在设置此功能的 Azure 门户中,它具有“多租户”选项,可以将其设置为“是” - 此支持的注释:
指定是否允许外部组织中的用户
授予您的应用程序对其组织目录中数据的访问权限。这
控制仅影响授予访问权限的能力。不影响
任何已被授予的访问权限。
一些早期测试表明这确实有效。However这意味着使用必须嵌入到应用程序中的 Oauth 密钥以及此处的注释:
https://learn.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols-oauth-code https://learn.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols-oauth-code
状态(与应用程序秘密相关):
....它不应该在本机应用程序中使用,因为 client_secrets
无法可靠地存储在设备上。 Web 应用程序需要它,并且
Web API,能够安全地存储 client_secret
在服务器端。
对于本机应用程序,此处的文档:
https://learn.microsoft.com/en-us/azure/active-directory/develop/active-directory-devhowto-multi-tenant-overview https://learn.microsoft.com/en-us/azure/active-directory/develop/active-directory-devhowto-multi-tenant-overview
State:
本地客户端注册默认是多租户的。你不
需要采取任何行动来制作本机客户端应用程序
注册多租户。
这表明它们应该按照我们期望的方式工作 - 但是,当我们使用来自与设置本机应用程序不在同一 Azure AD 中的帐户的 OAuth 流进行测试时,我们在身份验证后得到以下信息:
AADSTS70001:在目录 YYYYYYYYYYYYYYYYYYYY 中找不到标识符为“XXXXXXXXXXXXXXXXXXXXXX”的应用程序
所以看来这不起作用。目前,实现此目的的唯一方法似乎是创建一个 Web 应用程序并将客户端 ID 和密钥嵌入到本机应用程序中。
有没有人在多租户本机应用程序方面取得了成功,或者对我做错了什么或可以尝试什么有任何想法/反馈?
UPDATE我意识到这里有两件事是错误的:
* 实际上,您可以单击 Azure 中的“Manifest”按钮并编辑原始 JSON,更新“availableToOtherTenants”值以使其成为多租户。
* 我在 OAuth 流程中没有scope=user_impersonation。
现在看来我们可以创建一个本机应用程序,其他组织/租户中的用户可以使用该应用程序进行身份验证。
UPDATE 2好吧,事实证明我们的应用程序现在适用于某些用户,但至少有一个用户得到了:
AADSTS65005:资源无效。客户端请求访问未在客户端应用程序注册中请求的权限中列出的资源。客户端应用程序 ID:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA。请求的资源价值:https://XXX.YYYYYY.com https://XXX.YYYYYY.com。资源应用程序 ID:ZZZZZZZZZZZ。应用注册的有效资源列表: 00000002-0000-0000-c000-000000000000、00000003-0000-0ff1-ce00-000000000000。\r\n跟踪 ID: KKKKKKKKKKKKKKKKK\r\n关联 ID: CCCCCCCCCCCCCCCCCCC
我不明白为什么它适用于一个用户,但不适用于另一个用户(如果两者都位于创建应用程序的不同租户/Azure AD 中)。