我已将示例解决方案中的必要代码移至我的解决方案,并在进行身份验证时给出以下错误:
AADSTS90002:未找到租户授权。如果租户没有有效订阅,则可能会发生这种情况。请咨询订阅管理员。
我用这两行进行身份验证:
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%工作,但在我移动到我的应用程序时却不能。有什么想法吗?
在此先感谢您的帮助。
经过一些研究后我发现它与以下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/
一旦我“降级”了我的版本,就进行了身份验证!
希望这有助于其他人。
在我的情况下,我没有降级Microsoft.IdentityModel.Clients.ActiveDirectory
,我改变了https://login.windows.net/{My tenant}/oauth2/token
to https://login.microsoftonline.com/{My tenant}
的认证终点,解决了这个问题。
通过将程序集“Microsoft.IdentityModel.Clients.ActiveDirectory”还原为版本= 3.13.9.1126来解决。
使用此程序集的最新版本引发了此问题。版本= 4.4.0.0
是的,所有的答案都是正确的,我只是想说明为什么它在低版本而不是在新版本中工作
根据official doc,这是微软更好的权限验证更新
在AuthenticationContext的构造函数中设置权限时,ADAL.NET 4.x也不如ADAL 3.x宽容。对于Azure AD v1.0,有效权限应为:
- https://login.microsoftonline.com/ {Guid},其中Guid是租户ID
- https://login.microsoftonline.com/domainName,其中域名是与您的租户相关联的域名
- https://login.microsoftonline.com/common,在ADAL.NET的情况下,意味着任何Azure AD租户(注意意思是 在MSAL.NET中有所不同) 它不能是https://login.microsoftonline.com/common/OAuth2/endpoint,即使这可能在ADAL 3.x中被错误地接受了