我们正在进行this CRM Web API项目。该项目登录到Dynamics CRM在线实例并获取帐户列表。
登录似乎正常。 但是,帐户列表会出现以下错误:
AADSTS65001:用户或管理员未同意使用ID为“xxxx-xxxxx-xxxx-xxx”的应用程序。发送此用户和资源的交互式授权请求。 跟踪ID:e3b360d6-39fb-4e61-87d9-26531f30fd7b 相关ID:9b2cff0c-074e-44fe-a169-77c8061a7312 时间戳:2016-10-18 10:12:49Z
有什么问题?
答案 0 :(得分:29)
管理员必须同意这些权限。您应该向Azure AD发出包含参数prompt=admin_consent
。
与文档here一样,prompt参数可以包含3个值:login,consent或admin_consent。
将 tenant-id 替换为您的Azure AD租户ID /域名,或 common ,如果您的应用是多租户。将 app-client-id 替换为您应用的客户端ID。将 encoded-reply-url 替换为您应用的网址编码回复网址。
构建所需网址的一种更简单方法是进行身份验证,然后在点击Azure AD时抓取地址栏中的URL。然后只需将&prompt=admin_consent
添加到网址。
编辑:随着Azure门户的最新更新,能够直接从门户网站授予权限。
如果您转到新门户网站中的Azure Active Directory,请在那里找到您的应用注册,然后单击所需权限刀片下的授予权限。
答案 1 :(得分:2)
我在使用ADAL的本机应用程序中收到此错误。我已经给出了所有正确的权限,但已经收到了之前登录的令牌。我的问题是前一个令牌已过时且未包含更新的声明。对我来说,解决方案是根据下面的代码使用PromptBehavior.RefreshSession。
AuthenticationResult result = await authenticationContext.AcquireTokenAsync(resourceId, clientId, redirectURI, new PlatformParameters(PromptBehavior.RefreshSession, false));
根据MSDN,PromptBehavior.RefreshSession“重新授权(通过显示webview)资源使用情况,确保生成的访问令牌包含更新的声明。如果用户登录cookie可用,则用户不会再次询问凭据,登录对话框将自动解除。“
答案 2 :(得分:2)
对我来说,这个错误突然发生,对于少数用户来说也是如此。
我的设置是,SPA应用尝试访问API。我从SPA应用注册中删除了API权限并再次添加。有效。
答案 3 :(得分:2)
根据Oauth V2.0。您无需重新发送Token API中的Scope参数即可生成刷新/访问令牌。您也无需在azure门户中手动指定范围,它会自动列出。
它是从您的auth_code继承的,您可以删除范围和请求,它应该可以工作,而且一旦对access_token进行解码,您就应该能够看到在授权过程中请求的相同范围
答案 4 :(得分:0)
授予所有权限。您会发现多个下拉菜单(例如您在屏幕截图中显示的下拉菜单)。
每个下拉项目都有多个复选框,引用不同的凭据。检查每一个,然后你就可以了。
答案 5 :(得分:0)
向Azure AD注册的应用程序发生错误(委派权限),需要用户或管理员同意才能获得所需的权限。