我正在尝试使用microsoftgraph api从office365日历中读取/写入事件。我似乎无法获得正确的范围,当我需要calendar.readwrite时,我只获得user.read。这是我的代码请求,我已经尝试添加范围,我在注册门户的权限中定义了calendar.readwrite,但总是我只获得user.read。当我获得访问令牌时。
https://login.microsoftonline.com/common/oauth2/authorize?
client_id={CLIENT_ID}&
response_type=code&
redirect_uri=https://localhost&
state=985542
如何增加应用程序的范围?
答案 0 :(得分:1)
您的应用程序可能处于您同意user.read
范围而非calendar.readwrite
范围的状态。
具体来说,我的猜测是您只在user.read
范围内注册了您的应用,然后同意该应用。这很有效,您的令牌开始获得user.read
范围。然后,稍后您添加了calendar.readwrite
的附加权限,但是您没有在令牌中看到它!
这是因为您没有重新同意使用新范围的应用程序。如果您更改了应用程序的权限级别,则还必须重新同意新的应用程序。如果不这样做,您将继续获得您过去同意的权限,无论它们是什么。
要解决此问题,只需在登录网址末尾添加&prompt=consent
,这将强制用户同意新的权限集。
这是因为我们的令牌服务首先检查是否在用户和应用程序之间写入了EntitlementGrants。如果有,他们将跳过所有同意过程,并跳转到铸造令牌。如果您要删除同意记录,或强制用户再次同意,我们将从头开始此过程,这将导致您选择的所有权限。
请告诉我这是否有帮助!