代码之家  ›  专栏  ›  技术社区  ›  Robert Muehsig

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

  •  0
  • Robert Muehsig  · 技术社区  · 6 年前

    我有以下设置:

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

    enter image description here

    在登录期间,我的webapp重定向到Microsoft登录,如下所示(nonce和重定向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
    • 轮廓
    • 电子邮件
    • 用户。阅读
    • 离线访问
    • 用户。阅读基础。全部

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

    enter image description here

    作用域“User.ReadBasic.All” doesn't require a Admin consent ,但不知何故,当我删除此请求的范围时,用户可以在没有任何管理员同意的情况下登录到应用程序。

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

    目标是,一个“普通”用户可以登录我们的应用程序,而无需经过管理员在租户范围内的批准。 对于“多租户”应用程序,“需要管理员同意”是否不同?

    0 回复  |  直到 6 年前
        1
  •  4
  •   OjM    4 年前

    我也遇到过类似的问题,发现这是因为需要用户分配。在“属性”下检查您的企业应用程序,然后选择“需要分配=否”。

    enter image description here

    MS记录它 here

    另一种可能发生此错误的情况是当用户 应用程序需要分配,但没有管理员 同意书已经提供。在这种情况下,管理员必须首先 提供管理员同意。

        2
  •  3
  •   Carl Zhao    6 年前

    是的,正如@Sruthi J所说,当你选择 不允许用户同意 选项卡中 同意和许可 ,所有应用程序都必须得到管理员的同意。尝试选择 允许用户同意应用程序 选项卡来解决您的问题。

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

    2.选择Azure Active Directory>企业应用>同意和许可>用户同意设置。

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

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

    enter image description here

    请参阅: here .

        3
  •  1
  •   Philippe Signoret    6 年前

    用户同意可能因以下原因而被禁止 risk-based step-up consent .

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

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

        4
  •  0
  •   Sruthi J    6 年前

    在多租户场景中

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

    您应该有某种入职流程,其中在授权URL中包含提示=admin_consent,如上所述。虽然这次你会使用common而不是租户id/domain:

    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