Azure Active Directory在设置prompt=同意后需要管理员批准
在Azure Active Directory中的应用程序中,我向Graph API添加了一个管理员同意所需的权限,比如说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
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的权限(如果已配置)scopes
参数将包括访问令牌中包含的权限列表/.default
或v1上的resource
的应用程序)的应用程序不应为每个登录请求使用提示=同意
。相反,应用程序应:
提示=同意的情况下执行登录
范围参数:
- 如果列出了所需的权限,则无需进一步操作。