在征得管理员同意后,如何解决“ AADSTS90094:此应用程序需要另一个应用程序的应用程序权限”错误

时间:2019-03-28 19:52:22

标签: permissions azure-active-directory multi-tenant adal adal.js

我最近在多租户的Azure AD应用程序中请求了新的应用程序权限,以便可以访问Graph API。我正在使用adal.js对Web应用程序中的用户进行身份验证,而对Graph的实际请求是使用adal-node和证书在节点服务器上进行的。

新权限起作用。我可以使用应用程序权限访问Graph,并且节点服务器没有任何问题。

问题是,现在无论管理员多少次登录,只要管理员登录网络应用程序(使用`adal.js),他们都将获得同意屏幕。非管理员用户每次登录时都会看到“需要管理员批准”屏幕,这使他们根本无法登录。

我已经在不同的租约中尝试了相同的结果。我还尝试过通过azure.portal.com批准权限,然后将整个应用程序从租约中删除,然后再次批准。

我还尝试了删除新权限并恢复为旧权限。无论如何,用户都会点击“需要管理员批准”屏幕。

用户登录代码

public login(): void {
  this.adalContext.login();
}

管理员登录代码

public adminLogin(): void {
  this.adalContext.config.displayCall = (urlNavigate) => {
    let url = urlNavigate + "&prompt=admin_consent";
    this.adalContext.promptUser(url);
  };
  this.adalContext.login();
}

请注意,此应用在一个月的时间内一直运行良好。。只是更改了权限之后,这种情况才开始发生。

1 个答案:

答案 0 :(得分:1)

这个问题的答案最终对我有所帮助:Why Azure AD fails to login non-admins in multi-tenant scenario?

由于我仅请求 应用程序权限,因此,Azure AD默认会始终在用户登录时始终征求同意。一旦我添加了一个已授权权限({{1 }),同意提示消失了。

在进行故障排除期间,在添加和删除它们的过程中,我一定不小心错过了此权限。