我使用ASP.NET Web API创建了自定义OData Feed。使用Azure Active Directory进行身份验证配置此服务。我目前遇到的问题是当我尝试将Power BI或Power Query连接到OData源时。输入凭据后,我收到以下错误:
Invalid_resource:AADSTS50001:在名为XXX.onmicrosoft.com的租户中找不到名为https://localhost:44320的应用程序。如果租户的管理员尚未安装应用程序或租户中的任何用户同意该应用程序,则会发生这种情况。您可能已将您的身份验证请求发送给错误的租户。
我非常确定我已经正确配置了AAD,因为我可以通过网络浏览器连接而没有任何问题。我不确定是否可以连接Power Query,因为我在各种论坛中看到了相互矛盾的帖子!
非常感谢任何帮助。
答案 0 :(得分:1)
我已成功通过将我的WebAPI发布到Azure Web App来解决此问题。有趣的是,当它托管在Azure上时,它提示允许" Power Query for Excel"访问。问题可能仅限于我在我的开发箱上运行IIS Express的事实。
答案 1 :(得分:0)
在尝试使用PowerQuery将API数据输入到Excel电子表格中时,我也遇到了此错误,并且很难克服它,主要是因为有关所有这些内容的文档都比较薄。
我有一个运行在Azure中的ASP.NET API,并且在我自己的域中通过URL公开,例如https://api.myapp.net(而不是内置的Azure网址)。该API通过OWIN中间件UseWindowsAzureActiveDirectoryBearerAuthentication
连接到Azure AD,即Azure 中的App Service已关闭AAD身份验证。该应用程序已在AAD中作为多租户注册,位于与托管应用程序服务资源所在的租户不同的租户中。
首先在Excel中执行数据>从Web> https://api.myapp.net/Products,然后选择“组织帐户”,然后单击“登录”,出现此错误:
对此有两种不同的修复方法:
如果您使用owin中间件在代码中启用了API上的AAD,那么您需要确保服务在401响应中返回正确的WWW-Authenticate标头给客户端,特别是我们必须指定AAD登录端点作为授权uri,例如:
WWW-Authenticate: Bearer realm="",
authorization_uri="https://login.microsoftonline.com/<<tenant id of your users>>"
请参阅:this TechNet question which suggested this solution
本质上here描述了该配置
现在,当您单击查询上的登录时,返回Excel中,将弹出一个弹出窗口,并将您带到您配置的租户的Microsoft登录页面。输入凭据并登录后,您可能会收到此错误(问题中的那个):
要解决此问题,您需要确保已在AAD中正确注册了该应用程序。
这是...
{
"identifierUris": [
"https://api.myapp.net",
"https://<mytenant>.onmicrosoft.com/<myappregname>"
]
}
user_impersonation
范围可用于该应用程序:{
"oauth2Permissions": [
{
"adminConsentDescription": "Allow the application to access myapp on behalf of the signed-in user.",
"adminConsentDisplayName": "Access myapp",
"id": "xxxxx-xxx-xxx-xxx-xxxxxxx",
"isEnabled": true,
"lang": null,
"origin": "Application",
"type": "User",
"userConsentDescription": "Allow the application to access my on your behalf.",
"userConsentDisplayName": "Access my app",
"value": "user_impersonation"
}
]
}
现在回到Excel中,您应该可以通过登录,但是在单击“连接”时,您可能会遇到此错误:
现在在提琴手中查看,您将看到AAD登录有效并返回令牌,但是当该令牌发送到API时,您将获得401。
仅当您通过代码而不是通过Azure门户启用AAD时,这才是问题(请参见上面的问题1!)。要对其进行修复,您需要确保将传递到owin中间件的TokenValidationParameters
class设置为已部署API的实际URL ValidAudience
。
有了所有这些设置,现在一切都应该可以工作了,回到Excel中...
let
Source = Json.Document(Web.Contents("https://api.myapp.net/Products")),
#"Converted to Table" = Table.FromRecords(Source)
in
#"Converted to Table"
万一您关心(并且仍在阅读此书!),它的工作方式似乎是:
user_impersonation
授予“ Microsoft PowerQuery For Excel”应用程序很长的帖子很抱歉,但希望这可以帮助某人做一些看似微不足道的事情-将Azure中API的数据提取到Excel中!