使用 Excel Power Query 使用的 Web API OData 服务进行 WAAD 身份验证

2023-12-11

我使用 OWIN 中间件创建了一个 WebAPI OData 3.0 Web 服务,该服务配置为使用 Windows Azure Active Directory 进行身份验证。 ODataController 标有[Authorize]属性,IAppBuilder 配置如下:

app.UseWindowsAzureActiveDirectoryBearerAuthentication(
            new WindowsAzureActiveDirectoryBearerAuthenticationOptions
            {
                Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
                TokenValidationParameters = new TokenValidationParameters {
                    ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
                },
            });

ida:Tenant是我的 Windows Azure 租赁,并且ida:Audience是应用程序 ID Uri。

现在我想使用 Excel PowerQuery 使用此服务,并使用 AzureAD 中的帐户进行身份验证。但是,当我选择“组织帐户”并尝试“登录”时,出现以下错误:

无法连接。此资源不支持此凭据类型。

在 Fiddler 中,我可以看到请求是使用 Bearer 标头发出的,但它是空的。

我想实现与查询 AzureAD Graph 时类似的行为。
例如,如果我尝试消费https://graph.windows.net/.onmicrosoft.com/users?api-version=2013-04-05,将打开一个单点登录窗口,并且在 Fiddler 中我可以看到传递了一个令牌。

我怎样才能实现这种行为?我缺少什么?

Thanks!


以下是身份验证期间 PowerQuery 和 OData 服务之间的预期流程:

  • 当您在构建器中输入服务的 URI 时,单击“确定”,您将收到凭据提示,要求您提供访问该服务的凭据。
  • 通常,如果 Azure Active Directory (AAD) 是您的身份提供商,您将选择组织帐户。
  • 当您单击“登录”时,PowerQuery 将向您的服务发送质询请求,这是您看到的空承载。原因是,我们不知道您的身份提供商是什么,也不知道您应该在哪里登录,该请求期待 401/403 响应,其中包含包含身份验证端点 url 的 WWW-Authenticate 标头。

  • 以下是预期的标头格式:WWW-Authenticate Authorization_uri=”token service uri” 引号是可选的。如果我们找不到该标头,您会收到错误消息“无法连接”。不支持此凭证类型”。

  • 例如,在您的场景中,令牌服务 uri 是https://login.windows.net
  • 当我们收到该响应时,我们将从标头获取 url 并发出登录请求,此时您将看到来自 AAD 的登录页面,并且您将能够使用您的组织凭据登录。
  • 我们将等待登录结果,该结果应该是一个令牌,该令牌将用于在您从该服务请求数据时填充标头中的承载。

为了使这项工作正常进行,AAD 中的应用程序对象有两件重要的事情:

  • AppIdUris 属性必须具有与您的服务 URI 匹配的通配符 URI。当我们发送登录请求时,我们必须包含一个资源 ID,该资源是我们正在连接的服务的权限。因此,如果您的服务 url 是:myservice.com/myODatafeed.svc,权限包括方案、主机和端口号,则 myservice.com/ 将是权限。对于可能具有不同租户的服务,例如:company1.myservice.com,AppIdUri 必须具有 https://*.myservice.com。否则,只是https://myservice.com.
  • 第二件事(这是 AAD 特定的),AAD 目前不支持第一方客户端 (PowerQuery) 到第三方服务(您的服务)的身份验证。但希望很快:)也许就在你完成剩下的事情时:)!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Excel Power Query 使用的 Web API OData 服务进行 WAAD 身份验证 的相关文章

随机推荐

  • 具有不同布局的 RecyclerView.ViewHolders 中的 Android DataBinding

    我正在尝试在新项目中使用 androids 数据绑定功能 到目前为止我对此非常满意 但现在我在我的 recyclerviews viewholder 中遇到了一个问题 我的视图持有者使用不同的布局 基于创建时的视图类型 public Med
  • 访问临时内存中用户上传的视频时出现问题

    我正在尝试使用 html 输入类型将用户上传的视频提交到 youtubefile和 python 模块 youtube upload 提交表单后 处理方式如下 if request method POST video request FIL
  • Tensorflow Lite,图像大小零误差

    其实我的问题很简单 我想在tensorflow lite模型中使用我自己的数据 所以 我写了这行代码 root path r C Users 90531 Desktop dataset b image path os path join o
  • 用java抓取一个angularjs网站

    我需要抓取一个由 Angular 插入 内容的网站 而且需要用java来完成 我尝试过 Selenium Webdriver 因为我之前使用过 Selenium 来抓取动态性较低的网页 但我不知道如何处理 Angular 部分 除了页面头部
  • 命名空间命名约定

    对于那些编写可重用组件的人来说 如果要扩展 NET 框架的功能 您认为最佳实践是什么 例如 我目前正在创建一个 Pop3 库 因为 NET 中不存在该库 我是创建自定义命名空间还是使用System Net Mail 来自命名空间命名指南 命
  • 删除Python中每个元素的换行符

    我打开一个文本文件 现在文本文件中的每个元素都用换行符分隔 当我使用readlines 它将这个换行符保留在列表中 这是在每个元素之后 所以它看起来像这样 zebra n ant n 我想知道是否有一个简单的函数或代码片段可以用来删除该换行
  • 安装应用程序后,拖放不再起作用

    我有一个具有拖放功能来导入图像和视频的应用程序 在通过 Visual Studio 进行开发和测试时 从未出现过任何问题 通过设置项目安装后 应用程序中的所有内容都工作正常 除了拖放之外 这似乎什么也没做 是否有任何安全设置需要通过安装程序
  • java:单套接字读写操作。全双工

    我必须实现使用特定源端口发送数据 同时监听该端口 全双工 有谁知道如何在java上实现它 我尝试创建单独的线程来侦听套接字输入流 但它不起作用 我无法将 ServerSocket 和客户端套接字绑定到相同的源端口 并且与 netty 相同
  • 将具有固定大小数组的 C++ 结构编组到 C# 中

    我有一个 C 结构声明如下 public struct AdvertisementData public byte SomeId MarshalAs UnmanagedType LPArray SizeConst 12 public byt
  • 选择每组中的前三个值

    以下是我的示例表和行 create table com company text val int insert into com values com1 1 com1 2 com1 3 com1 4 com1 5 insert into c
  • 如何检查消息是否由特定用户发送discord.py

    我正在使用 Discord py 来制作我的 Discord 机器人 当有人输入消息时 我想检查用户是否是 foo 3645 然后执行某些操作 如果不是 则执行其他操作 if messageAuthor foo 3645 do someth
  • Spring boot 与 H2 数据库自动创建

    我通过 Spring Boot 在我的 Java 应用程序中使用嵌入式 H2 目前 它创建 覆盖 我在数据库中的表 但一旦我把它投入生产 我不希望我的表被擦除并重新创建 所以我不会丢失表中以前的数据 但我不知道如何实现这一点 不知道该放什么
  • 解析动态命名的 JSON 对象最有效的方法是什么?

    我正在尝试解析一个 JSON 响应 其中包含一些我不太熟悉的内容 而且我也没有经常在野外见过 在其中一个 JSON 对象内部 有一个动态命名的 JSON 对象 在这个例子中 里面有一个JSON对象 bugs named 12345 这与错误
  • 对轨迹进行重新采样,使每个样本中的欧氏距离相等

    假设我们有一个 x y 点列表 x 0 0 0 y 0 10 100 点之间的欧几里得距离现在为 10 90 我正在寻找一个接受x y 和sample rate 的函数 并且可以输出相等的距离点 例如 x 0 0 0 y 0 10 100
  • 是否可以绑定 WHERE 名称,如 %:name%

    我正在测试一个小型搜索功能 但我遇到了一个似乎无法解决的错误 您可以在此处查看 PDO 查询 search test1 later to be changes to POST search sql SELECT id name FROM c
  • 如何禁用 Django 的 CSRF 验证?

    我已经注释掉了 csrf 处理器和中间件行settings py 122 123 TEMPLATE CONTEXT PROCESSORS 124 django contrib auth context processors auth 125
  • Entity Framework Core 如何进行任何异步?

    public async Task
  • 我不知道Python中的s[::-1]是什么[重复]

    这个问题在这里已经有答案了 我一直看到这个 s 1 在Python中 我不知道它是做什么的 抱歉 如果这是一个问题 但我是 python 和一般编程的新手 它反转了一个sequence使用切片 gt gt gt s hello gt gt
  • PHP:“...的声明应该与...的声明兼容”

    我想为可 CRUD 可以保存和删除 的实体创建一个接口 这是我的抽象类 abstract class AbstractCrudableEntity extends AbstractEntity abstract public functio
  • 使用 Excel Power Query 使用的 Web API OData 服务进行 WAAD 身份验证

    我使用 OWIN 中间件创建了一个 WebAPI OData 3 0 Web 服务 该服务配置为使用 Windows Azure Active Directory 进行身份验证 ODataController 标有 Authorize 属性