Node.js 访问被拒绝。请检查凭据并重试

Node.js 访问被拒绝。请检查凭据并重试,node.js,api,ms-office,office365,azure-active-directory,Node.js,Api,Ms Office,Office365,Azure Active Directory,我尝试使用node.js上的Microsoft Graph API访问日历事件,但收到错误响应: { "code": "ErrorAccessDenied", "message": "Access is denied. Check credentials and try again.", "innerError": { "request-id": "7c2...", "date": "2016-07-13T21:19:11" } } 通过以

我尝试使用node.js上的Microsoft Graph API访问日历事件,但收到错误响应:

{
   "code": "ErrorAccessDenied",
    "message": "Access is denied. Check credentials and try again.",
    "innerError": {
      "request-id": "7c2...",
      "date": "2016-07-13T21:19:11"
    }
}
通过以下方式拨打电话:

request({url : 'https://graph.microsoft.com/v1.0/me/calendarview',  qs : queryParams, 'auth': {'bearer': token}}, function (error, response, body) {
    ...
});
该请求具有有效令牌,并且调用了…/me/via

request({url : 'https://graph.microsoft.com/v1.0/me/', 'auth': {'bearer': token}}, function (error, response, body) {
    ...
});
返回:

{"@odata.context":"https://graph.microsoft.com/v1.0/$metadata#users/$entity",
"id":"<valid_id>",
"businessPhones":[],
"displayName":"<valid_name>",
"givenName":"<valid_name>",
"jobTitle":"<valid_title>",
"mail":"<valid_email>",
"mobilePhone":"<valid_cell>",
"officeLocation":null,
"preferredLanguage":"en-US",
"surname":"<valid_name>",
"userPrincipalName":"<valid_email>"}
以下是我在节点应用程序上设置的“对其他应用程序的权限”:

  • Microsoft Azure Active Directory:
    • 授权权限
      • 阅读所有用户的完整配置文件
      • 登录并读取用户配置文件
  • Microsoft图形:
    • 授权权限
      • 拥有对用户日历的完全访问权限
      • 读取用户日历
  • (见下文)
    • 授权权限
      • 通路
以下是我在web客户端应用程序上设置的“对其他应用程序的权限”:

  • Microsoft图形:
    • 应用程序权限
      • 在所有邮箱中读取和写入日历
      • 读取所有邮箱中的日历
    • 授权权限
      • 登录用户
      • 读取用户联系人
      • 拥有对用户日历的完全访问权限
      • 读取用户日历
      • 登录并读取用户配置文件
  • Office Exchange 360 Online:
    • 应用程序权限
      • 在所有邮箱中读取和写入日历
      • 读取所有邮箱中的日历
    • 授权权限
      • 读取用户和共享日历
      • 读写用户和共享日历
      • 阅读所有用户的基本配置文件
      • 读取用户配置文件
      • 读取用户联系人
      • 读取用户日历
  • Microsoft Azure Active Directory
    • 应用程序权限:无
    • 授权权限
      • 登录并读取用户配置文件
我不是100%了解azure管理门户内设置的权限与特定端点访问之间的关系。我已经读过了,但是那篇文章中的讨论对于我的需要来说有点过于概念化


最终,我尝试访问租户id中的所有可保留资源并将其写入事件。

我能够通过删除然后通过更新客户端id和密码重新生成应用程序来解决此问题。事实上,我能够从应用程序列表中删除本机客户端(节点)应用程序,并且仍然可以让呼叫正常工作


虽然我没有使用Fei Xue提供的参考,但我认为它对于将来调试azure to API权限将是非常宝贵的

我可以通过删除然后通过更新客户端id和密码重新生成应用程序来解决这个问题。事实上,我能够从应用程序列表中删除本机客户端(节点)应用程序,并且仍然可以让呼叫正常工作


虽然我没有使用Fei Xue提供的参考,但我认为它对于将来调试azure to API权限将是非常宝贵的

以确保令牌有足够的权限读取用户的日历。我们从中解码令牌。有日历吗。看令牌上的范围吗?谢谢费雪。我不知道这个网站,我将在将来使用它调试令牌,以确保令牌有足够的权限读取用户的日历。我们从中解码令牌。有日历吗。看令牌上的范围吗?谢谢费雪。我不知道这个网站,我将来会用它来调试令牌
var AzureOAuthStrategy = require('passport-azure-oauth').Strategy;
passport.use(new AzureOAuthStrategy({
    clientId:     config.live.clientID,
    clientSecret: config.live.clientSecret,
    tenantId:     config.live.tenant,
    resource:     'https://graph.microsoft.com/', 
    redirectURL:  config.live.callbackURL
},
function(accessToken, refreshToken, profile, done) {