Oauth 2.0 添加新权限导致:访问被拒绝。请检查凭据并重试

Oauth 2.0 添加新权限导致:访问被拒绝。请检查凭据并重试,oauth-2.0,microsoft-graph-api,Oauth 2.0,Microsoft Graph Api,我制作了一个应用程序,用户登录到他们的Office 365帐户,我使用Microsoft Graph API执行操作。当我第一次启动应用程序时,我请求了一些权限,比如个人资料和邮件权限。但是,我现在想访问用户的日历,因此我添加了更多权限(Calendars.Read、Calendars.ReadWrite) 现在,当我尝试获取用户的日历事件时,我收到以下错误: {代码:ErrorAccessDenied,消息:访问被拒绝。请检查凭据 然后重试,错误:{请求id: 33074527-630e-41

我制作了一个应用程序,用户登录到他们的Office 365帐户,我使用Microsoft Graph API执行操作。当我第一次启动应用程序时,我请求了一些权限,比如个人资料和邮件权限。但是,我现在想访问用户的日历,因此我添加了更多权限(Calendars.Read、Calendars.ReadWrite)

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

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


我注意到,一旦我添加了这些日历权限,它就不会提示用户接受这些新权限,所以我想这就是我没有访问权限的原因。我是否必须删除我的应用程序或其他内容才能从用户处获得这些权限?我试图强制用户再次登录,向
scopes
变量添加新的权限请求,但它仍然没有向用户请求这些权限。

否,您需要更新为用户记录的同意。我猜您正在使用,因为这个问题往往比v2端点更频繁地出现:)

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

要显示提示,您需要在授权URL上包含一个
prompt=approve
查询参数,如文档所示

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

那么,如何判断使用的端点呢

  • 您是否已在注册应用程序?您正在使用v1
  • 您是否在代码中使用ADAL库?那是v1
  • 您正在使用MSAL库吗?那是v2

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


否,您需要更新为用户记录的同意。我猜您正在使用,因为这个问题往往比v2端点更频繁地出现:)

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

要显示提示,您需要在授权URL上包含一个
prompt=approve
查询参数,如文档所示

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

那么,如何判断使用的端点呢

  • 您是否已在注册应用程序?您正在使用v1
  • 您是否在代码中使用ADAL库?那是v1
  • 您正在使用MSAL库吗?那是v2

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


您是否在请求中添加了作用域?您是否在应用程序管理中添加了权限您是否在请求中添加了作用域?您是否在应用程序管理中添加了权限