问题描述
我在应用程序注册中添加的“ API权限”与实际请求的范围之间有什么联系?
我注意到我仍然可以请求所有需要的权限,但是可以将此注册(除了“应用程序”权限之外)留空:
这可行:
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.0
和v2.0
端点之间的区别是,当使用v1.0
端点时,我们使用resource
而不是scope
,所有权限都需要列在API permissions
中。
在您使用v2.0
端点的情况下,我们可以动态地请求权限。是否在API permissions
中添加权限都没有关系,当在请求URL的scope
中添加权限时,将弹出同意窗口。
使用Microsoft Identity Platform终结点,您可以忽略Azure门户中应用程序注册信息中定义的静态权限,而以增量方式请求权限,这意味着预先要求最少的权限集,并且随着时间的推移会增加更多的权限。客户使用其他应用程序功能。为此,您可以随时通过在请求访问令牌时在scope参数中包括新范围来指定应用所需的范围,而无需在应用程序注册信息中预先定义它们。如果用户尚未同意将新范围添加到请求中,则系统将提示他们仅同意新权限。