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



我创建了一个应用程序,用户在其中登录到其Office 365帐户,并使用Microsoft图形API执行操作。当我第一次启动该应用程序时,我请求了一些权限,例如个人资料和邮件权限。但是,我现在想要访问用户的日历,因此我添加了更多权限(Calendars.Read,Calendars.ReadWrite(。

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

{code: ErrorAccessDenied, message: Access is dedened。检查凭据 ,然后重试。, innerError: {request-id: 33074527-630e-41cf-bd00-4fcd5f0ac816, 日期: 2018-09-10T03:15:07}}

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

不,您需要更新为用户记录的同意。我的猜测是你使用的是 Azure v1 OAUth2 终结点,因为此问题往往比 v2 终结点:)更频繁地出现。

此处的问题是,用户第一次同意时,Azure 会记录他们的同意,因此不会再次提示他们。该记录捕获了你最初在应用注册上配置的权限。Azure v1 不够"智能",无法检测到自记录用户同意以来你在应用注册上添加了新权限,因此它很乐意继续颁发具有旧权限的令牌,跳过用户提示。

若要显示提示,需要在授权 URL 上包含一个prompt=consent查询参数,如此处所述。

如果使用的是 v2 OAuth2 终结点,这会变得容易一些。使用 v2 终结点时,只需在授权 URL 的scope查询参数中包含新的权限范围。Azure 将检测到用户尚未同意他们,并会提示。

那么,如何判断您正在使用哪个端点呢?

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

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

相关内容

最新更新