添加新权限导致:访问被拒绝。检查凭据,然后重试

时间:2018-09-10 03:25:29

标签: oauth-2.0 microsoft-graph

我制作了一个应用程序,用户在该应用程序中登录其Office 365帐户,并使用Microsoft Graph API执行操作。首次启动该应用程序时,我要求的权限很少,例如个人资料和邮件权限。但是,我现在要访问用户的日历,因此添加了更多权限(Calendars.Read,Calendars.ReadWrite)。

现在,当我尝试获取用户的日历事件时,出现以下错误:

  

{代码:ErrorAccessDenied,消息:访问被拒绝。检查凭证   然后重试。,innerError:{request-id:   33074527-630e-41cf-bd00-4fcd5f0ac816,日期:2018-09-10T03:15:07}}

我注意到,一旦添加了这些日历权限,便没有提示用户接受这些新权限,因此我认为这就是为什么我没有访问权限。为了获得用户的这些权限,是否必须删除我的应用程序或其他内容?我试图强迫用户再次登录,将新的权限请求添加到scopes变量中,但是它仍然没有向用户询问这些权限。

1 个答案:

答案 0 :(得分:1)

否,您需要更新为用户记录的同意书。我的猜测是您正在使用Azure v1 OAUth2 endpoints,因为该问题比v2端点更容易出现在此问题上:)。

这里的问题是,您的用户第一次同意时,Azure记录了他们的同意,因此不会再次提示他们。该记录捕获了您最初在应用程序注册中配置的权限。自记录用户同意以来,Azure v1不够“智能”,无法检测到您已在应用程序注册中添加了新权限,因此它很乐意继续使用旧权限发行令牌,从而跳过了用户提示。

要显示提示,您需要在授权URL上包含一个prompt=consent查询参数,如记录的here所示。

如果您使用的是v2 OAuth2 endpoints,这会变得容易一些。对于v2端点,您要做的就是在scope查询参数的授权URL中包括新的权限范围。 Azure将检测到用户未同意他们,并会提示。

那么您如何知道您正在使用哪个端点?

  • 您是否在https://portal.azure.com注册了该应用程序?您正在使用v1。
  • 您是否在代码中使用ADAL库?那是v1。
  • 您是否正在使用MSAL库?那是v2。

  • 您的代码是否将用户发送到其中带有v2.0的URL?您猜对了,那就是v2。如果其中没有v2.0,则为v1。