如何在给予管理员同意后修复“AADSTS90094:此应用程序需要对另一个应用程序的应用程序权限”错误

How to fix " AADSTS90094: This application requires application permissions to another application" error after giving admin consent

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

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

问题是,现在每当管理员登录网络应用程序(使用 `adal.js)时,他们都会看到同意屏幕,无论他们同意多少次。非管理员用户在登录时会看到 "Need Admin Approval" 屏幕,使他们根本无法登录。

我在不同的租户中尝试过此方法,结果相同。我还尝试通过 azure.portal.com 批准权限并从租户中完全删除应用程序并再次批准它们。

我也试过取消新权限并恢复到旧权限。无论如何,用户正在点击 "Need admin approval" 屏幕。

用户登录码

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();
}

需要说明的是,此应用 运行 在 一个多月 期间没有问题。只有在我更改权限后才开始发生这种情况。

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

由于我只请求 应用程序权限,Azure AD 默认总是在用户登录时征求同意。一旦我添加了一个 delegated权限(Microsoft.Graph.User.Read),同意提示消失。

我一定是在故障排除过程中添加和删除它们时不小心错过了这个权限。