【发布时间】:2016-07-15 02:02:24
【问题描述】:
我正在尝试使用 this permissions guide 之后的 node.js 上的 Microsoft Graph API (https://graph.microsoft.com/v1.0/me/calendarView) 访问日历事件,但我收到错误响应:
{
"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/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>"}
所以我假设这是在 https://manage.windowsazure.com/ 上设置权限的问题,我在其中创建了两个应用程序,一个用于节点服务器,一个用于 Web 客户端应用程序。我正在使用护照进行身份验证,并使用 Web 客户端应用程序的客户端 ID 和密码。
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) {
这是我在节点应用程序上为“其他应用程序的权限”设置的:
- Windows Azure 活动目录:
- 委派权限
- 阅读所有用户的完整个人资料
- 登录并阅读用户资料
- 委派权限
- 微软图表:
- 委派权限
- 拥有对用户日历的完全访问权限
- 读取用户日历
- 委派权限
- (见下文)
- 委派权限
- 访问
- 委派权限
这是我在 Web 客户端应用程序上为“其他应用程序的权限”设置的内容:
- 微软图形:
- 应用程序权限
- 在所有邮箱中读写日历
- 阅读所有邮箱中的日历
- 委派权限
- 让用户登录
- 读取用户联系人
- 拥有对用户日历的完全访问权限
- 读取用户日历
- 登录并阅读用户资料
- 应用程序权限
- Office Exchange 360 在线版:
- 应用程序权限
- 在所有邮箱中读写日历
- 阅读所有邮箱中的日历
- 委派权限
- 读取用户和共享日历
- 读写用户和共享日历
- 阅读所有用户的基本资料
- 阅读用户资料
- 读取用户联系人
- 读取用户日历
- 应用程序权限
- Windows Azure 活动目录
- 应用程序权限:无
- 委派权限
- 登录并阅读用户资料
我不是 100% 了解 Azure 管理门户中设置的权限与特定端点访问之间的关系。我已经阅读了API scope article,但那篇文章中的讨论对于我的需求来说有点过于概念化了。
最终,我试图访问租户 ID 内的所有可预留资源并将事件写入事件。
【问题讨论】:
-
保证token有足够的权限读取用户的日历。我们从here 解码令牌。令牌中是否有 Calendars.Read 范围?
-
谢谢飞雪。我不知道这个网站,我以后会用它来调试令牌
标签: node.js api ms-office office365 azure-active-directory