问题描述
我有以下设置:
具有应用程序注册的AAD目录A。该应用程序注册被标记为多租户应用程序,并且默认情况下没有请求的权限:
在登录期间,我的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中(并且没有任何只有管理员才能同意申请的特殊设置)。当我尝试登录到我的应用程序时,结果如下:
范围“ User.ReadBasic.All” doesn't require a Admin consent,但是以某种方式,当我删除此请求的范围时,用户无需管理员同意即可直接登录应用程序。
问题是:为什么管理员同意在“ User.ReadBasic.All”范围内显示?
目标是,“普通”用户可以登录到我们的应用程序,而无需征得管理员的广泛同意。 对于“多租户”应用程序,“需要管理员同意”是否有所不同?
解决方法
是的,就像@Sruthi J所说的那样,当您在同意和许可中选择不允许用户同意标签时,所有应用程序都必须征得管理员的同意。尝试选择允许用户同意应用标签以解决您的问题。
1。以全局管理员身份登录到Azure门户。
2。选择“ Azure Active Directory”>“企业应用程序”>“同意和权限”>“用户同意设置”。
3。在应用程序的用户同意下,选择要为所有用户配置的同意设置。
4。选择“保存”以保存您的设置。
请参阅: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”类别下发出失败的“同意应用程序”事件,表示由于基于风险的检测而失败。