none
Graph API 会議室取得の失敗について

    質問

  • いつもお世話になっております。

    Graph Apiを利用し、会議室カレンダーの予定を取得したいのですが、エラーがかえてきてしまい、取得に失敗してしまいます。

    具体的に試した方法が2つあるのですが、

    1つ目は、

    https://graph.microsoft.com/v1.0/users/会議室名@my.com/calendarview?startdatetime=2018-04-19T19:25:06.250Z&enddatetime=2018-04-26T19:25:06.250Z

    "code": "ErrorItemNotFound",
            "message": "The specified object was not found in the store.",

    404(Not Found)のエラーがかえってきて参照できないです。

    https://graph.microsoft.com/v1.0/users/会議室名@my.com/findMeetingTimes

    参考 : https://msdn.microsoft.com/ja-jp/office/office365/api/calendar-rest-operations#FindMeetingTimes


    503(Forbidden)
    "code": "ErrorInternalServerTransientError",
            "message": "An internal server error occurred. Try again later.",


    Calendars.ReadWrite.sharedの権限をつけています。    

    以前は404(Not Found)のエラーがかえってきている方のGraph Apiで動いていたはずなのですが、
    現在は取得に失敗しています。

    以前は1つ目の取得方法で処理が動作していた認識なのですが、仕様の変更がありましたか?

    また、改善案や、代替案があれば教えて欲しいです。
    参考や、回答が記載されているサイトのリンク、回答お待ちしております。

    Exchange 管理センター -> リソース -> メールボックスの委任 -> フルアクセス許可 より、メールボックスの委任をすれば、動作するのですが、そちらは方針上、避けたいので、改善案、代替案は他のやり方をご教示いただきたいです

    以上、宜しくお願いいたします。

    ----API参考サイト-----

    1つ目: https://developer.microsoft.com/ja-jp/graph/docs/api-reference/v1.0/api/user_list_calendarview

    2つ目: https://msdn.microsoft.com/ja-jp/office/office365/api/calendar-rest-operations#FindMeetingTimes


    2018年6月27日 7:33

回答

  • こんにちは。

    まず前提として押さえておきたいのが、アプリケーションに設定するアクセス許可とユーザに割り当てられたアクセス許可は別に考えなければならない、ということです。

    アプリケーションにCalendars.ReadWrite.Sharedを付けたらかといって、ログインユーザに予定表へのアクセス許可がなければ、他の予定表を参照することはできません。

    すなわち、

    ※Exchange 管理センター -> リソース -> メールボックスの委任 -> フルアクセス許可 より、メールボックスの委任をすれば、動作するのですが

    というのが正しい動作です。

    2018年7月2日 3:20

すべての返信

  • こんにちは。

    まず前提として押さえておきたいのが、アプリケーションに設定するアクセス許可とユーザに割り当てられたアクセス許可は別に考えなければならない、ということです。

    アプリケーションにCalendars.ReadWrite.Sharedを付けたらかといって、ログインユーザに予定表へのアクセス許可がなければ、他の予定表を参照することはできません。

    すなわち、

    ※Exchange 管理センター -> リソース -> メールボックスの委任 -> フルアクセス許可 より、メールボックスの委任をすれば、動作するのですが

    というのが正しい動作です。

    2018年7月2日 3:20
  • すみません、代替案を忘れていました。

    試せていませんが、Client Credentials Grantであれば、Calendars.Read (Read calendars in all mailboxes) で読めそうな気がします。
    https://docs.microsoft.com/ja-jp/azure/active-directory/develop/active-directory-protocols-oauth-service-to-service

    ただし、非常に強い権限になるのと、認可フローが異なるので、注意が必要です。

    2018年7月2日 3:48