在Office 365中访问其他用户日历时,Graph API中的访问被拒绝或未找到错误

时间:2017-12-08 14:32:20

标签: ruby-on-rails office365 microsoft-graph office365api outlook-calendar

我想从Microsoft Office 365上的管理员帐户访问我的组织的其他用户日历。在Office 365上,我可以搜索并访问这些日历。 我想使用Microsoft Graph API访问这些(其他用户的)日历。 以下是使用Graph API访问Office 365日历的官方文档。 1. Calendars from Users 2. Directly Access Calenders

这是我的Auth Helper类,我在其中定义了我的权限范围

module AuthHelper

  CLIENT_ID = '91e6****-****-40f7-9b46-******d1149c'
  CLIENT_SECRET = 'pftjo*******55;hwSN2-(%'

  SCOPES = [ 'openid',
             'profile',
             'User.Read',
             'Mail.Read',
             'Calendars.Read',
             'Calendars.Read.Shared' ]

  def get_login_url
    client = OAuth2::Client.new(CLIENT_ID,
                                CLIENT_SECRET,
                                :site => 'https://login.microsoftonline.com',
                                :authorize_url => '/common/oauth2/v2.0/authorize',
                                :token_url => '/common/oauth2/v2.0/token')

    login_url = client.auth_code.authorize_url(:redirect_uri => authorize_url, :scope => SCOPES.join(' '))
  end

  def get_token_from_code(auth_code)
    client = OAuth2::Client.new(CLIENT_ID,
                                CLIENT_SECRET,
                                :site => 'https://login.microsoftonline.com',
                                :authorize_url => '/common/oauth2/v2.0/authorize',
                                :token_url => '/common/oauth2/v2.0/token')

    token = client.auth_code.get_token(auth_code,
                                   :redirect_uri => authorize_url,
                                   :scope => SCOPES.join(' '))
  end

尝试邮递员:

https://graph.microsoft.com/v1.0/users 查询以及向我显示所有用户的标题

GET / users / {id | userPrincipalName} / calendars 查询显示404 Not Found错误。

简而言之,我可以从office365应用程序的搜索栏访问其他用户的日历,但无法使用

访问

any of these methods

1 个答案:

答案 0 :(得分:0)

看起来只有在用户上下文之外运行的应用程序(如服务/守护程序应用程序)才能访问组织中的每个日历。 Getting access tokens for apps that run without the presence of a signed-in user is a bit different并且您需要通过管理员同意流程才能让您的应用访问每个人的日历。我刚刚对此进行了测试,Calendars.Read是您需要的唯一范围。

enter image description here

步骤如下:

  1. 注册您的应用
  2. 添加Calendars.Read作为申请许可
  3. 转到https://login.microsoftonline.com/{REPLACE WITH TENANT}/adminconsent?nonce=graph&prompt=select_account&client_id={REPLACE_WITH_APP_ID}&response_type=token&redirect_uri=https://localhost:3001&state=foobar
  4. 等网址,向您的应用授予管理员同意权

    一旦我获得了访问令牌,其余用户访问其他用户日历的呼叫正是您在问题中发布的内容:

    GET https://graph.microsoft.com/v1.0/users/[user-id]/calendars

    获得日历ID后,您可以在以下位置查看其日历活动:

    GET https://graph.microsoft.com/v1.0/users/[user-id]/calendars/[calendar-id]/events

    我建议您在Graph explorer中查看我们的日历示例。

    enter image description here