我正在尝试从 Excel VSTO WorkBook 调用受 Azure AD 保护的 WebApi。这与我们用于 SPA 应用程序的 webApi 相同,但现在还想直接从 Excel 使用相同的 Api。
我已经搜索了很长时间,但找不到任何关于这应该如何工作的指导。
有谁知道这是否可行,如果可以,应该如何实现?
我正在尝试从 Excel VSTO WorkBook 调用受 Azure AD 保护的 WebApi。这与我们用于 SPA 应用程序的 webApi 相同,但现在还想直接从 Excel 使用相同的 Api。
我已经搜索了很长时间,但找不到任何关于这应该如何工作的指导。
有谁知道这是否可行,如果可以,应该如何实现?
我昨天遇到了这个并让它工作了,谢谢这个线程。
听起来这种情况一度不受支持,但现在确实有效。以下是需要做的事情:
从 Excel 访问的服务,它应该在某个时候发回 HTTP 401 响应,让客户端 (Excel) 知道需要身份验证(这应该已经发生了)。然后 Excel 将向服务发送另一个请求,其中包含 header Authorization: Bearer
。重要的是要注意后面没有任何内容Bearer
,因为一旦身份验证流程完成,Excel 将开始发送带有类似标头的请求,但单词后面会有更多信息Bearer
,并且您应该允许这些请求继续通过请求管道.
为了使身份验证流程正常工作,对上述请求的服务响应必须包含以下标头值:
WWW-Authenticate: Bearer authorization_uri="Your auth URI here"
引号应该包含在响应中。由于您使用的是 Azure AD,因此您的 URI 将如下所示:
https://login.microsoftonline.com/{tenantId}/oauth2/authorize
替换{tenantId}
为您的租户 ID。
我发现要让它起作用的一个警告是,服务域的 URL(例如http://my.domain.com
)必须与应用注册中的应用 Uri Id 匹配。我希望有办法解决这个问题,因为我相信我过去读过这不是一个好习惯(尽管我再也找不到源了)。如果有另一种方法来处理这个问题,我会回来更新我的答案。