从AAD应用程序获取PowerBI服务的访问令牌时出错

时间:2017-01-03 11:51:53

标签: c# azure access-token azure-active-directory

我需要来自AAD的访问令牌(以非交互方式)才能访问PowerBI服务。

这就是我所拥有的:

  1. 使用PowerBI权限在Native application中创建的Azure Active Directory
  2. 原生应用程序的client_idclient_secret
  3. Console application我正在传递client_iduser_emailuser_password
  4. 我尝试过不同用户的凭证,

    1. 普通用户的凭证
    2. 管理员凭据
    3. 服务帐户的凭证
    4. 总而言之,我在获取令牌时遇到以下错误

        

      其他信息:AADSTS65001:用户或管理员尚未   同意使用ID为''的应用程序。发送一个   此用户和资源的交互式授权请求。

      以下是我使用https://msdn.microsoft.com/en-in/library/partnercenter/dn974935.aspx

      的参考资料

      可能的原因是什么?

1 个答案:

答案 0 :(得分:0)

虽然可以以非交互方式为用户获取访问令牌,但重要的是要注意,至少要开始,必须为用户提供某种程度的交互式体验。

为了使客户端应用程序能够访问Resource API,用户必须同意允许Resource API将数据提供给客户端应用程序。即使只是登录,客户端应用程序也会收到一个包含用户的UPN,安全组,角色,名字/姓氏等的令牌...... AAD本身必须感觉可以将这些个人数据提供给客户端应用程序,这意味着用户必须同意为该应用程序“登录并阅读基本配置文件”。这意味着总是需要同意所有基于用户的应用程序。

一旦建立了同意信任,后续呼叫就可以以非交互方式进行,但只有在记录同意后才能进行。

完整的同意体验是通过我们的服务器上托管的登录体验来处理的,并且不需要您编写任何代码或托管任何内容。只需指定用户登录并同意您的应用程序,方法是生成包含您的配置信息的URL:

https://login.microsoftonline.com/<TenantID>/oauth2/authorize?client_id=<AppID>&response_type=code&redirect_uri=<RedirectURI>&resource=<ResourceURI>&prompt=admin_consent

请注意,我们添加了“prompt = admin_consent”,这是租户管理员可以执行的特殊形式的同意,这将同意客户端应用代表租户中所有用户所需的权限。 如果您希望您的同意是基于每个用户,请将其更改为“prompt = consent”。

我希望这有帮助!