PowerBI AADSTS90002:找不到租户授权

时间:2018-11-27 15:17:27

标签: c# powerbi-embedded

参考: Power BI Sample Solution

我已将必要的代码从示例解决方案移至我的解决方案,并且在进行身份验证时出现以下错误:

  

AADSTS90002:找不到租户授权。如果有可能会发生这种情况   没有租户的有效订阅。检查您的订阅   管理员。

我正在使用以下2行进行身份验证:

 var authenticationContext = new AuthenticationContext(AuthorityUrl);
 var authenticationResult = await authenticationContext.AcquireTokenAsync(ResourceUrl, ApplicationId, credential);

该错误发生在最后一行。以下是我的web.config中的值:

<add key="authorityUrl" value="https://login.windows.net/common/oauth2/authorize/" />
<add key="resourceUrl" value="https://analysis.windows.net/powerbi/api" />

同样,这在示例应用程序中可以100%起作用,但是当我移至我的应用程序时无效。有什么想法吗?

在此先感谢您的帮助。

5 个答案:

答案 0 :(得分:15)

因此,经过一些研究,我发现这与以下nuget软件包的版本有关:

Microsoft.IdentityModel.Clients.ActiveDirectory
Microsoft.PowerBI.Api

需要使用以下版本:

Microsoft.IdentityModel.Clients.ActiveDirectory v3.13.9
Microsoft.PowerBI.Api V2.0.12

似乎与使用的端点有关。如果您降级到上述版本(与提供的示例工具中使用的版本相同),那么它将起作用。

最新版本使用的是这样的内容:https://login.microsoftonline.com/common/,其中相同提供的版本是:https://login.windows.net/common/oauth2/authorize/

一旦我“降级”了我的版本,它就会通过身份验证!

希望这对其他人有帮助。

答案 1 :(得分:5)

在我的情况下,我将身份验证端点从Microsoft.IdentityModel.Clients.ActiveDirectory更改为https://login.windows.net/{My tenant}/oauth2/token,而不是将https://login.microsoftonline.com/{My tenant}降级了。

答案 2 :(得分:2)

通过将程序集“ Microsoft.IdentityModel.Clients.ActiveDirectory ”还原为Version = 3.13.9.1126来解决。

使用该程序集的最新版本会引发此问题。版本= 4.4.0.0

答案 3 :(得分:2)

是的,所有的答案都是正确的,我只想说明为什么它在低版本而不是新版本中起作用

根据official doc,这是来自Microsoft的更好的权限验证更新

  

设置ADAL.NET 4.x时,其宽容度也低于ADAL3.x。   AuthenticationContext构造函数中的授权。有效   对于Azure AD v1.0,应具有以下权限:

     

答案 4 :(得分:0)

修复非常简单,但很难从 Microsoft Docs 中找到,因为它们非常庞大。所以我要分享对我们有用的东西。

请注意,我们使用 AuthenticationContext 结合 ClientCredential 来获取令牌。

3.x 版本的 AuthorityUrl 是 - https://login.windows.net/{yourOrg}/oauth2/token

升级到 4.x 或更高版本后,应更改为 - https://login.microsoftonline.com/{yourOrg}

如果你想知道完整的代码只有 2 行

var authenticationContext = new AuthenticationContext(AppSettings.AuthorityUri);
var token = authenticationContext.AcquireTokenAsync(AppSettings.ResourceUri, new ClientCredential(AppSettings.ClientId, AppSettings.ClientSecret)).GetAwaiter().GetResult();