Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure Active Directory在设置prompt=同意后需要管理员批准_Azure_Oauth_Azure Active Directory - Fatal编程技术网

Azure Active Directory在设置prompt=同意后需要管理员批准

Azure Active Directory在设置prompt=同意后需要管理员批准,azure,oauth,azure-active-directory,Azure,Oauth,Azure Active Directory,在Azure Active Directory中的应用程序中,我向Graph API添加了一个管理员同意所需的权限,比如说Group.Read.All。我已单击了授予…管理员许可。如果我使用查询参数prompt=approve以用户身份点击/authorize端点,我将获得需要管理员批准的视图。如果我在没有任何提示参数的情况下命中端点,那么一切都正常-我能够获得具有适当范围的令牌。我在文档中读到,prompt参数仅确定同意的可见性。为什么会这样 prompt=approve在用户登录后触发OAu

在Azure Active Directory中的应用程序中,我向Graph API添加了一个管理员同意所需的权限,比如说
Group.Read.All
。我已单击了授予…管理员许可。如果我使用查询参数
prompt=approve
以用户身份点击
/authorize
端点,我将获得需要管理员批准的视图。如果我在没有任何
提示
参数的情况下命中端点,那么一切都正常-我能够获得具有适当范围的令牌。我在文档中读到,
prompt
参数仅确定同意的可见性。为什么会这样

prompt=approve
在用户登录后触发OAuth同意对话框,要求用户授予应用程序权限

访问应用程序的个人需要至少一个超出其权限范围的权限

管理员将看到显示权限的相同提示,并在传统的同意提示上看到一个附加控件,允许他们代表整个租户同意

用户将被阻止同意该应用程序,并被告知向其管理员请求访问该应用程序


有关更多详细信息,请参阅。

关于
prompt=approve
,:

授权服务器应在将信息返回给客户端之前提示最终用户同意。如果无法获得同意,则必须返回一个错误,通常是
需要同意

在Microsoft Identity platform中,这意味着最终用户需要提供同意,即使该用户或(在工作或学校帐户中,由管理员代表该用户)之前已授予同意

如果用户未被授权同意请求的权限(例如,因为用户同意被禁用或限制),使用
prompt=approve
将始终导致用户被硬阻止

在大多数情况下,使用
prompt=approve
不是最好的方法。通常考虑三种情况
prompt=同意

  • 您已经更改了所需的权限。所需的权限已更改(例如,权限已被添加或删除),用户需要同意新的权限集
  • 您想通知用户。应用程序开发人员希望确保通知用户应用程序将被授权行使哪些权限(即使管理员已代表相关用户同意)
  • 您需要得到用户本人的同意,而不是管理员的同意。应用程序开发人员希望确保最终用户自己提供同意,与管理员之前可能授权的内容无关
  • 如果您已更改所需的权限 动态定义请求的权限时

    在上,
    scope
    参数可用于请求委托权限列表。例如,请求
    识别的API的
    读取
    导出
    委托权限https://api.example.com

    scope=openidhttps://api.example.com/read
    
    Azure AD将确保所有请求的权限都已授予,并尝试对任何尚未授予的权限(并且仅对那些权限)提示同意。如果请求的权限已全部授予,则已颁发的令牌将包括所有已授予的权限(即使未特别请求)

    一般来说,当使用v2.0端点的增量同意功能时,不应使用
    prompt=approve
    。如果需要,Azure AD将负责提示增量同意

    当静态定义请求的权限时

    应用程序也只能识别其正在请求访问令牌的资源(即API),具体权限是为应用程序静态定义的。使用v2.0端点,可在
    范围
    参数中完成此操作,使用:

    scope=openidhttps://api.example.com/.default
    
    在中,这是使用
    资源
    参数实现的:

    资源=https://api.example.com
    
    所需权限列表在应用程序注册的静态列表中配置。在Azure门户中,此列表位于Azure AD>应用程序注册>API权限中的配置权限下。在Microsoft Graph中的非递归实体中(以及中),这在
    requiredResourceAccess
    属性中被忽略

    收到此类型的请求(在v1或v2端点上)时,Azure AD将检查已为请求的资源授予了哪些权限:

  • 如果未为请求的资源授予委派权限,或者使用了
    prompt=approve
    ,Azure AD将尝试从静态定义的列表中提示所有必需的权限。这将包括对其他API的权限(如果已配置)
  • 如果已为请求的资源授予任何委派权限,Azure AD将向令牌颁发所有授予的权限。响应的
    scopes
    参数将包括访问令牌中包含的权限列表
  • 依赖静态定义的所需权限(即v2上的
    /.default
    或v1上的
    resource
    的应用程序)的应用程序不应为每个登录请求使用
    提示=同意
    。相反,应用程序应:

  • 在没有
    提示=同意的情况下执行登录
  • 检查响应的
    范围
    参数:
    
    • 如果列出了所需的权限,则无需进一步操作。