Sup*_*pez 5 excel azure oauth-2.0 azure-active-directory
我们已通过 Azure AD(实现 OAuth 2.0)对多租户 SaaS 应用程序实施身份验证。API 可通过 Angular SPA 访问,也可由其他客户端(例如具有专用客户端 ID 的注册 REST 客户端)访问。如果相关的话:我们使用授权代码流程。
在同一个应用程序上,我们有一个 OData API,我们希望通过它提供对用户应用程序(例如 Excel)的数据访问。由于我们是一个多租户应用程序,因此需要像访问“普通”Web API 时一样对连接进行身份验证,以便我们的数据层可以过滤该租户拥有的数据。
尽管我们只使用 Microsoft 服务(通过 Azure),但 Microsoft Excel 如何使用正确的身份验证方法连接到 OData 源似乎并不明显。我发现一篇文章解释了如何使用具有自定义连接定义的 Power Query 编辑器。我不会考虑这种方法,因为它对于典型的最终用户来说不是一个强大的解决方案。除了这种自定义配置方法之外,我还阅读了有关接管连接的商业第三方库的信息。然而,对于我的 SaaS 客户,我不能建议将此作为通用解决方案。
我还发现另一篇文章使用 Azure 函数作为代理 API 来获取数据。对于最终用户来说,这似乎是一个强大的解决方案,但我不确定如何安全、正确地为正确的用户验证 API(本文中的示例专用于 1 个租户)。
问:是否有强大的(开箱即用的)配置供最终用户从 Excel 访问经过 OAuth 身份验证的 OData feed/API?如果没有,我应该考虑哪些安全的替代方案?
您可以从客户端应用程序(例如 Excel、Word、Powerpoint 和 Publisher)在 AzureAD 上进行 OAuth 2.0 身份验证。这适用于打开整个文件(Office 2016 或更高版本)或从网页(Office 2019 / M365 应用程序)导入数据。
当您在 REST 客户端中使用 OAuth 身份验证时,设置 OAuth 身份验证的方式与常规且记录良好的 OAuth 流程略有不同。
您不需要发送将客户端转发到https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize的标头 ,而是需要返回 http 响应代码 401(未经授权)并添加以下标头:
WWW-Authenticate: Bearer resource="https://management.azure.com/" client_id="{the client id of your registered app in Azure AD}", trusted_issuers="00000001-0000-0000-c000-000000000000@*", token_types="app_asserted_user_v1 service_asserted_app_v1", authorization_uri="https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize",Basic Realm=""'
Run Code Online (Sandbox Code Playgroud)
在 Azure AD 中您的应用程序注册中:
注意:所有这些都没有记录在案。我通过嗅探 Outlook 和 O365 之间的流量发现了标头。
顺便说一句:如果您使用 webdav 协议提供文件:从网页中打开 Excel 文件可以很好地使用 javascript:
location.href = "ms-excel:ofe|https://{yourAPI}/your_output.xlsx"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5661 次 |
| 最近记录: |