在 Azure AD 中,我创建了 2 个具有相同参数的应用程序注册,我想将它们用于不同的环境。当我使用第一次注册时,一切正常。但是切换到另一个后我收到错误
AADSTS65001: The user or administrator has not consented to use the application with ID
尝试获取代币时:
var result = await app.AcquireTokenOnBehalfOf(new[] { "User.Read" }, userAssertion).ExecuteAsync();
我不知道为什么会发生这个错误,因为我只配置了一个权限,并且不需要管理员权限
在客户端,我尝试添加一个参数
prompt=consent
以显示一个由用户提供权限的对话框,但它没有帮助。
您知道为什么在我的情况下会出现此错误吗?
给你一些方法:
导航到 Azure Active Directory -> 企业应用程序 -> 同意和权限 -> 用户同意设置。
导航到 Azure Active Directory -> 企业应用程序 -> 用户设置。
在浏览器中测试:
https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id={client-id}
&response_type=code
&redirect_uri=http://localhost
&response_mode=query
&scope=https://graph.microsoft.com/User.Read
&state=12345
同样的错误 AADSTS65001,以下步骤解决了我的 EWS HttpRequest 与 OAuth 令牌到应用程序邮箱的问题:
... ... ...
// C#
// 获取具有委托授权的令牌
var ewsScopes = new string[] { EWS_OAuthUrl };
var cred = new NetworkCredential(Credentials_EMailAcc, Credentials_EMailPswd);
var authResult = await pca.AcquireTokenByUsernamePassword(new string[] { EWS_OAuthUrl }, cred.UserName, cred.SecurePassword).ExecuteAsync();
// 使用访问令牌配置 ExchangeService
ExServ = new ExchangeService();
ExServ.Url = new Uri(EWS_Url);
ExServ.Credentials = new OAuthCredentials(authResult.AccessToken);
对我来说,这个答案有效 - https://stackoverflow.com/a/63028237/10871196
总结 - 调用 /oauth2/v2.0/token 端点时无需发送作用域参数