Microsoft Graph:登录期间非管理员同意的必需范围“ User.ReadBasic.All”的“需要管理员批准”

问题描述

我有以下设置:

具有应用程序注册的AAD目录A。该应用程序注册被标记为多租户应用程序,并且默认情况下没有请求的权限:

enter image description here

在登录期间,我的Web应用程序将以这种方式重定向到Microsoft登录(即刻删除了重定向uri):

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?
client_id=05f0df69-2f61-4b41-91ff-31656787f9d3
&redirect_uri=https%3A%2F%2F....azurewebsites.net%2Fids%2Foidc-signin-office365auth
&response_type=code%20id_token&scope=openid%20profile%20email%20User.Read%20offline_access%20User.ReadBasic.All
&response_mode=form_post
&nonce=...

范围是:

  • openid
  • 个人资料
  • 电子邮件
  • User.Read
  • offline_access
  • User.ReadBasic.All

我的测试用户位于AAD目录B中(并且没有任何只有管理员才能同意申请的特殊设置)。当我尝试登录到我的应用程序时,结果如下:

enter image description here

范围“ User.ReadBasic.All” doesn't require a Admin consent,但是以某种方式,当我删除此请求的范围时,用户无需管理员同意即可直接登录应用程序。

问题是:为什么管理员同意在“ User.ReadBasic.All”范围内显示?

目标是,“普通”用户可以登录到我们的应用程序,而无需征得管理员的广泛同意。 对于“多租户”应用程序,“需要管理员同意”是否有所不同?

解决方法

是的,就像@Sruthi J所说的那样,当您在同意和许可中选择不允许用户同意标签时,所有应用程序都必须征得管理员的同意。尝试选择允许用户同意应用标签以解决您的问题。

1。以全局管理员身份登录到Azure门户。

2。选择“ Azure Active Directory”>“企业应用程序”>“同意和权限”>“用户同意设置”。

3。在应用程序的用户同意下,选择要为所有用户配置的同意设置。

4。选择“保存”以保存您的设置。

enter image description here

请参阅:here

,

在多租户场景中

如果这是第一次来自其他租户的用户登录,并且您的应用需要获得管理员同意的权限,则登录的第一个用户必须是管理员。

您应该具有某种形式的入职流程,其中您需要在上述授权URL中包含prompt = admin_consent。尽管这次您将使用common而不是租户ID /域:

https://login.microsoftonline.com/common/oauth2/authorize?response_type=code&client_id=id&redirect_uri=https%3A%2F%2Flocalhost%3A44307%2F&prompt=admin_consent

请参阅此document

,

由于risk-based step-up consent,可能不允许用户同意。

您可以通过查看审核日志(在“ AAD目录B”中)确认是否是这种情况:Azure门户> Azure AD>审核日志(在“监视”类别下)。

如果由于基于风险的保护而不允许用户同意,则会在“ ApplicationManagement”类别下发出失败的“同意应用程序”事件,表示由于基于风险的检测而失败。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...