【问题标题】:Call Azure AD protected WebApi from Excel VSTO WorkBook从 Excel VSTO WorkBook 调用受 Azure AD 保护的 WebApi
【发布时间】:2016-12-27 04:00:07
【问题描述】:

我正在尝试从 Excel VSTO WorkBook 调用受 Azure AD 保护的 WebApi。 这是我们用于 SPA 应用程序的同一个 webApi,但现在还想直接从 Excel 使用同一个 Api。

我已经搜索了很长时间,但找不到任何关于它应该如何工作的指导。

有谁知道这是否可行,如果可行,应该如何实现?

【问题讨论】:

    标签: excel asp.net-web-api asp.net-web-api2 azure-active-directory winforms-to-web


    【解决方案1】:

    (不是答案)谢谢布赖恩,你的 cmets 真的帮助了我。我无法在 cmets 部分添加更多详细信息。所以我将其添加为答案。这是我面临的错误。它没有打开天蓝色的身份验证窗口来登录。请建议我在哪里进行。

    【讨论】:

      【解决方案2】:

      我昨天遇到了这个问题并让它工作了,谢谢this thread

      听起来这个场景曾经一度不受支持,但现在它确实有效。以下是需要做的事情:

      从 Excel 访问的服务,它应该在某个时候发回 HTTP 401 响应,让客户端 (Excel) 知道需要身份验证(这应该已经发生了)。然后 Excel 将向服务发送另一个请求,其标题为 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 匹配。我希望有办法解决这个问题,因为我相信我过去读过这不是一个好习惯(尽管我再也找不到源了)。如果有其他方法可以解决这个问题,我会回来更新我的答案。

      【讨论】:

      • 嗨@brian-ball,这正是我想要的,我正在传递这样的标题。 Source = Json.Document(Web.Contents(url,[Headers = [#"Content-Type"="application/json",#"WWW-Authenticate" = "Bearer authorization_uri https://login.microsoftonline.com/{tenantId}.onmicrosoft.com/oauth2/v2.0/token",#"Ocp-Apim-Subscription-Key" = "{SubKey}"] 如何嵌入授权 url 的正文?以下是授权网址的正文。 client_id={ClientId}&client_secret={secret}&scope=api://{..}/Token.Read&grant_type=password&userName={user}.onmicrosoft.com&password={pass}
      • 我很难跟踪您的代码,但我看到了 {pass} 和 {secret} 之类的占位符,您不应该将任何敏感信息传递回 Excel。您需要发回 Excel 将用来打开用户将用来进行身份验证的小型 Web 浏览器的 URL。身份验证工作流程完成后,Excel 将获得一个令牌,它将包含在标头中,并与您的服务的下一个请求一起使用。您应该能够使用该令牌并通过您的 OAuth 提供商兑换它以完成身份验证工作流程。
      猜你喜欢
      • 1970-01-01
      • 2020-02-19
      • 2017-11-02
      • 1970-01-01
      • 2019-12-03
      • 2020-02-07
      • 2018-11-27
      • 2018-06-25
      • 2021-05-30
      相关资源
      最近更新 更多