【问题标题】:Adding new permissions resulted in: Access is denied. Check credentials and try again添加新权限导致:访问被拒绝。检查凭据并重试
【发布时间】:2018-09-10 03:25:28
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您是否在请求中添加了范围?您是否在应用程序管理中添加了权限

标签: oauth-2.0 microsoft-graph-api


【解决方案1】:

不,您需要更新为用户记录的同意。我的猜测是您使用的是Azure v1 OAUth2 endpoints,因为这个问题往往比 v2 端点更频繁地出现在那里:)。

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

要显示提示,您需要在授权 URL 中包含 prompt=consent 查询参数,如文档中的 here 所述。

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-26
    • 2020-01-17
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 2014-08-10
    相关资源
    最近更新 更多