0

我想从我在 Microsoft Office 365 上的管理员帐户访问我组织的其他用户日历。在 Office 365 上,我可以搜索和访问这些日历。我想使用 Microsoft Graph API 访问这些(其他用户的)日历。以下是使用 Graph API 访问 Office 365 日历的官方文档。1.来自用户的日历 2.直接访问日历

这是我在其中定义权限范围的 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查询以及向我显示所有用户的标题,但

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

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

这些方法中的任何一种

4

1 回答 1

0

看起来只有在用户上下文之外运行的应用程序(如服务/守护程序应用程序)才能访问组织中的每个日历。 为在没有登录用户的情况下运行的应用程序获取访问令牌有点不同,您需要通过管理员同意流程才能让您的应用程序访问每个人的日历。我刚刚对此进行了测试,这Calendars.Read是您唯一需要的范围。

在此处输入图像描述

步骤是:

  1. 注册您的应用
  2. 添加Calendars.Read为应用程序权限
  3. 通过转到类似的 URL 授予管理员对您的应用程序的同意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

获得访问令牌后,访问另一个用户日历的其余调用正是您在问题中发布的内容:

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中查看我们的日历示例。

在此处输入图像描述

于 2017-12-11T05:26:54.327 回答