AADSTS65001:用户或管理员未同意使用 ID 为“<应用程序 ID>”的应用程序

Posted

技术标签:

【中文标题】AADSTS65001:用户或管理员未同意使用 ID 为“<应用程序 ID>”的应用程序【英文标题】:AADSTS65001: The user or administrator has not consented to use the application with ID '<application ID> 【发布时间】:2020-04-04 12:28:47 【问题描述】:

我们遵循 Microsoft 代码授权流程的 OAuth2 的 v2,如下所述,

https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow

我们在Microsoft Azure下的App Register中创建应用后,尝试从以下url获取代码

https://login.microsoftonline.com/concept4.net/oauth2/v2.0/authorize?client_id=&response_type=code&redirect_uri=https://postman-echo.com/get&response_mode=query&scope=profile%20openid%20offline_access%20https%3A%2F%2Fgraph.microsoft.com%2Fuser.read&state=skip_get_token2&prompt=consent

然后我们得到以下错误

"error":"invalid_grant","error_description":"AADSTS65001: 用户或管理员未同意使用 ID 为 '' 名为 'c4app2019' 的应用程序。为此用户和资源发送交互式授权请求。 \r\n跟踪 ID:46424a2f-a3a2-45da-8902-888f5ca61c00\r\n相关 ID:49d0a6ad-e158-4bc9-97b8-a6391c6470bb\r\n时间戳:2019-12-11 07:51:31Z","error_codes" :[65001],"时间戳":"2019-12-11 07:51:31Z","trace_id":"46424a2f-a3a2-45da-8902-888f5ca61c00","correlation_id":"49d0a6ad-e158-4bc9-97b8 -a6391c6470bb","suberror":"consent_required"

知道我们需要为我们的应用授予什么权限吗?

【问题讨论】:

这个租户中的企业应用是concept4.net吗?你能用租户 id 试试吗? 是的,应用在concept4net下,使用tenant代替concept4.net,同样报错。 尝试去掉url中的&amp;prompt=consent参数。 顺便说一句,如果我使用不正确的域(除了 concept4.net)来获取代码,它会说我的帐户“需要更多信息”,如果我这样做是为了获取令牌,它会说我的应用程序在目录“xxx”中找不到 docs.microsoft.com/en-us/azure/active-directory/develop/… 【参考方案1】:

我无法重现您的问题。以下是我的步骤供您参考。

1.创建具有User.Readprofile 权限的应用程序。

2.由于我添加的权限不需要管理员同意,所以我可以在第一次登录时同意。

https://login.microsoftonline.com/tenant/oauth2/v2.0/authorize?
client_id=59437d85-46f8-409c-8211-b3db91a8b0e5
&response_type=code
&redirect_uri=http://localhost
&response_mode=query
&scope=https://graph.microsoft.com/User.Read
&state=12345

3.使用我从第二步得到的代码获取令牌

如需定位您的问题,请提供步骤2(应用注册->您的应用->API 权限)之类的屏幕截图。以及您用于获取代码/令牌的范围值。

【讨论】:

谢谢托尼,它现在似乎工作了。但是我得到的令牌似乎不包含刷新令牌。我们错过了什么(例如授权类型)? @raymond.mh.ng 要获取刷新令牌,只需将 offline_access 添加到范围offline_access https://graph.microsoft.com/User.Read【参考方案2】:

如果它对任何人都有帮助,我在使用 Microsoft.Azure.Services.AppAuthentication.1.3.1 包中的神奇 AzureServiceTokenProvider 类时遇到了同样的问题。很简单的代码

var tokenProvider = new AzureServiceTokenProvider();
string token = tokenProvider.GetAccessTokenAsync("https://mytenant.onmicrosoft.com/8a0bec0f-x-x-x-x").GetAwaiter().GetResult(); // Application ID URI

我的错误信息是

AADSTS65001:用户或管理员未同意使用 ID 为 'd7813711-9094-4ad3-a062-cac3ec74ebe8' 的应用程序。为此用户和资源发送交互式授权请求。

我在 Azure AD 的任何地方都找不到这个 d7813711 guid。在查看了此类在反编译器中的工作方式后,事实证明,当您不指定应用 ID 时,该类默认为该 guid。也许这个 guid 对 Azure 中的租户有效?要解决此问题以便为您的应用获取令牌,只需将其添加为授权客户端应用程序即可。

【讨论】:

【参考方案3】:

[附加测试1] 第1步: 我创建了另一个使用较少 API 权限的应用程序,它有同样的问题

第 2 步: 通过以下网址获取代码 https://login.microsoftonline.com/concept4.net/oauth2/v2.0/authorize?client_id=15bf7752-....-c51cd145174c&response_type=code&redirect_uri=https://postman-echo.com/get&response_mode=query&scope=https://graph.microsoft.com/User.Read&state=skip_get_token2

得到了

第三步:

好像可以了

微软文档中获取代码和令牌的范围似乎不正确或需要一些额外的权限。

【讨论】:

嗨@raymond.mh.ng 我知道获取访问令牌和刷新令牌的方法吗?期待您的回复【参考方案4】:

我们也遇到过这个问题。我们已将图形客户端更新为较新的版本。我们做了以下步骤:

撤销所有管理员同意 删除所有权限 重新添加已删除的权限 授予管理员同意

我希望这将有助于解决问题。

【讨论】:

【参考方案5】:

我遇到了类似的问题,按照this video 一步一步介绍如何在 AAD 中设置您的应用注册并使用 Postman 进行测试解决了我的问题(我在配置中遗漏了一些细节),希望对您有所帮助

【讨论】:

以上是关于AADSTS65001:用户或管理员未同意使用 ID 为“<应用程序 ID>”的应用程序的主要内容,如果未能解决你的问题,请参考以下文章

AADSTS70002:验证凭据时出错。 AADSTS50126:用户名或密码无效

试图让Azure中美国州长的授权代码时出错:获得“无效的资源AADSTS650057”

登录 Azure Web 应用程序失败并显示“AADSTS50079:用户需要使用多重身份验证”

同意消息未显示

AADSTS750054:SAMLRequest 或 SAMLResponse 必须作为查询字符串参数出现在 SAML 重定向绑定的 HTTP 请求中

Azure AD-资源所有者凭据流错误无效的用户名或密码