Microsoft Graph:应用程序注册和API权限与请求的范围

问题描述

我在应用程序注册中添加的“ API权限”与实际请求的范围之间有什么联系?

我注意到我仍然可以请求所有需要的权限,但是可以将此注册(除了“应用程序”权限之外)留空:

enter image description here

这可行:

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

过去,我认为请求的范围和应用程序注册中的应用程序权限必须匹配,但这似乎不再是这种情况。

我的目标是使应用程序注册尽可能小。

这个问题可能与this question有关。

解决方法

v1.0v2.0端点之间的区别是,当使用v1.0端点时,我们使用resource而不是scope,所有权限都需要列在API permissions中。

在您使用v2.0端点的情况下,我们可以动态地请求权限。是否在API permissions中添加权限都没有关系,当在请求URL的scope中添加权限时,将弹出同意窗口。

参考-https://docs.microsoft.com/en-us/azure/active-directory/azuread-dev/azure-ad-endpoint-comparison#incremental-and-dynamic-consent

使用Microsoft Identity Platform终结点,您可以忽略Azure门户中应用程序注册信息中定义的静态权限,而以增量方式请求权限,这意味着预先要求最少的权限集,并且随着时间的推移会增加更多的权限。客户使用其他应用程序功能。为此,您可以随时通过在请求访问令牌时在scope参数中包括新范围来指定应用所需的范围,而无需在应用程序注册信息中预先定义它们。如果用户尚未同意将新范围添加到请求中,则系统将提示他们仅同意新权限。

相关问答

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