我在尝试获取令牌时收到同意错误。由于我们的申请,我们无法展示互动对话以表示同意。
" AADSTS65001:用户或管理员未同意使用 ID为<'我的原生客户端应用ID'>的应用。发送一个 此用户和资源的交互式授权请求。
AuthenticationContext ctx = new AuthenticationContext(
string.Format("https://login.microsoftonline.com/{0}","mytenant.onmicrosoft.com"));
UserPasswordCredential cred = new UserPasswordCredential("login@mytenant.onmicrosoft.com", "Password");
var result = ctx.AcquireTokenAsync("my api uri", "my native client id", cred);
我们使用grant_type=password
,client_id
是原始应用ID,resource
是Web API应用URI。
权限 - 来自客户端应用程序,已授予访问api应用程序的委派权限,并且还尝试在清单中设置oauth2AllowImplicitFlow : true
。
所有应用程序都已在新门户网站(portal.azure.com)的新预览Azure AD部分中创建
答案 0 :(得分:2)
不幸的是,如果您的应用程序需要访问某些资源(如Graph API),则需要至少提示一次同意。
即使您的应用没有交互式登录体验,您也应该能够提示一次取消阻止租户中的方案。
使用以下网址:
https://login.microsoftonline.com/<TenantID>/oauth2/authorize?client_id=<AppID>&response_type=code&redirect_uri=<RedirectURI>&resource=<ResourceURI>&prompt=admin_consent
您可以在这里看到我们刚刚生成的登录URL,它将作为交互式登录体验的一部分生成。您需要填写自己的特定数据,如回复URL,应用程序ID,资源URI等...
请注意,我们在结尾处添加了一个最终查询字符串,我们强制要求“同意”提示。这应由管理员完成,管理员可以代表整个租户同意。完成后,用户名/密码流应该开始为您工作。
另外,作为补充说明,隐式授权流程与同意无关。 请阅读OAuth 2规范中的此部分: https://tools.ietf.org/html/rfc6749#section-1.3.2
如果您使用JavaScript创建单页应用程序,则只应使用此设置;否则,对于不应该拥有它的应用程序,此设置存在严重的安全问题。