我创建了一个带有OWIN中间件的WebAPI OData 3.0 Web服务,该中间件配置为使用Windows Azure Active Directory进行身份验证。
ODataControllers标有[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
是App ID Uri。
现在我想使用Excel PowerQuery使用此服务,使用AzureAD中的帐户进行身份验证。但是,当我选择“组织帐户”并尝试“登录”时,我收到以下错误:
无法连接。此资源不支持此凭据类型。
在Fiddler中我可以看到请求是使用Bearer标头进行的,但它是空的。
我想实现类似于查询AzureAD Graph时的行为 例如,如果我尝试使用https://graph.windows.net/.onmicrosoft.com/users?api-version=2013-04-05,则会打开一个单点登录窗口,而在Fiddler中,我可以看到一个令牌被传递。
我该如何实现这种行为?我错过了什么?
谢谢!
答案 0 :(得分:6)
以下是验证过程中PowerQuery与OData服务之间的预期流程:
当您点击登录时,PowerQuery会向您的服务发送质询请求,这是您看到的空载者。原因是,我们不知道您的身份提供商是什么或我们应该在哪里登录,请求期望使用具有身份验证端点URL的WWW-Authenticate标头进行401/403响应。 / p>
以下是预期的标头格式:WWW-Authenticate authorization_uri =“令牌服务uri”引号是可选的。如果我们找不到该标题,则会收到错误消息“无法连接”。不支持此凭据类型'
有关AAD中的应用程序对象的两个重要事项是:
答案 1 :(得分:0)
更新:这已在最新版本的PowerQuery中启用。您的应用需要公开user_imperonation范围,您最好去:)!