【问题标题】:Error while getting access token for PowerBI service from AAD application从 AAD 应用程序获取 PowerBI 服务的访问令牌时出错
【发布时间】:2017-05-17 12:14:34
【问题描述】:
我需要来自 AAD 的访问令牌(以非交互方式)来访问 PowerBI 服务。
这是我所拥有的:
-
Native application 在 Azure Active Directory 中创建,具有 PowerBI 权限
- Native 应用程序的
client_id 和 client_secret
-
Console application 我正在传递client_id、user_email 和user_password。
我尝试过不同用户的凭据,
- 普通用户的凭据
- 管理员凭据
- 服务帐号的凭据
总之,我在获取令牌时遇到以下错误
附加信息:AADSTS65001:用户或管理员尚未
同意使用 ID 为“”的应用程序。发送一个
对此用户和资源的交互式授权请求。
这是我使用的参考https://msdn.microsoft.com/en-in/library/partnercenter/dn974935.aspx
这可能是什么原因?
【问题讨论】:
标签:
c#
azure
access-token
azure-active-directory
【解决方案1】:
虽然可以通过非交互式方式为用户获取访问令牌,但重要的是要注意,至少在开始时,必须为用户提供某种程度的交互式体验。
为了让客户端应用程序访问资源 API,用户必须同意允许资源 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”。
我希望这会有所帮助!