Проблема в том, что ваш токен не имеет правильной области. Чтобы иметь доступ к общим календарям, вам нужен Calendars.Read.Shared
(или Calendars.ReadWrite.Shared
). Как вы получаете, что сфера в ваш знак зависит от того, где вы зарегистрировали приложение (которое отвечает на первый вопрос!)
Имеет ли значение, где и как заявка была зарегистрирована?
Да, это важно. Оба метода будут работать, но там, где вы регистрируете, влияет на то, как вы запрашиваете авторизацию и токены. Кроме того, приложения, зарегистрированные в Azure Management Portal, могут только аутентифицировать пользователей Office 365, а не пользователей Outlook.com. Подробнее об этом в № 2.
Неважно, какой идентификационный URL мы используем?
Да! Используемый вами URL напрямую связан с местом, где вы зарегистрировали свое приложение. Я собираюсь сломать это ниже.
Разрешения области приложения против делегированных разрешений на область - неважно, какие из них мы установили в приложении? Будет ли наша желаемая функциональность работать с делегированными разрешениями?
Да, это важно. Разрешения приложений предоставляются приложению, а для API Outlook они являются глобальными для всей организации. Поэтому, если вы предоставляете приложение Mail.Read
, оно может читать почту для всех пользователей в организации. Приложение действует как само по себе и не аутентифицирует пользователя. Из-за этого для метода auth требуется сертификат вместо секретности клиента. Этот метод предназначен для приложений типа daemon. Вы, скорее всего, хотите делегировать разрешения, так как хотите аутентифицировать пользователей, а затем предоставить им доступ только к тем другим почтовым ящикам/календарям, которые им разрешено просматривать.
Разрешения AD каким-то образом влияют на разрешения, которые пользователь имеет в приложении?
Ну да, в том смысле, что если вы включаете в свои разрешения область .Shared
, то у пользователя есть доступ к тому, что другие пользователи поделились с ними (и это связано с AD).
Как добавить общий объем
Как я уже говорил выше, это имеет значение, как вы зарегистрировали свое приложение.
Azure Management Portal
приложения, зарегистрированные в портале управления Azure использовать "v1" вариант реализации oauth2 Azure в. В соответствии с этой моделью вы должны указать разрешения для своего приложения «вверх» на самой регистрации приложения. Чтобы добавить общее разрешение, вам необходимо изменить регистрацию приложения на портале. Разрешения отображаются на портале как «Чтение пользовательских и общих календарей» (для Calendars.Read.Shared
) и «Чтение и запись пользовательских и общих календарей» (для Calendars.ReadWrite.Shared
).
Если ваше приложение регистрируется здесь, то вы должны использовать v1 AUTH и маркер конечных точек:
https://login.microsoftonline.com/common/oauth2/authorize
https://login.microsoftonline.com/common/oauth2/token
Кроме того, по схеме v1, если вы добавляете новую область действия для регистрации на приложении, вы должны иметь пользовательский повтор. В противном случае, в следующий раз, когда они войдут в ваше приложение, они просто получат те же разрешения, что и раньше. Для этого при отправке пользователей в конечную точку авторизации добавьте параметр prompt=consent
в URL авторизации.
Применение Регистрация Портал
приложения зарегистрированные здесь использовать v2 Azure реализацию и получить несколько преимуществ. Во-первых, вы можете аутентифицировать учетные записи Microsoft (Outlook.com), а также пользователей Office 365. Во-вторых, добавление областей не требует изменения регистрации вашего приложения. И, наконец, вам не нужно вручную повторять пользователей, конечная точка auth обнаружит изменение и предложит вам.
приложение зарегистрированное здесь использует v2 авторизацию и маркер конечных точки:
https://login.microsoftonline.com/common/oauth2/v2.0/authorize
https://login.microsoftonline.com/common/oauth2/v2.0/token
Область применение указаны в параметре scope
URL в Идентой конечной точке. Чтобы добавить общие области, вы просто замените существующие Calendars.Read
и/или Calendars.ReadWrite
эквивалентом .Shared
.
были ли у вас обновления? Я столкнулся с тем же вопросом – Tony
nope :(sry. Все еще застрял:/ – Jiri
Не могли бы вы опубликовать полный URL-адрес, к которому вы пытаетесь получить доступ, и заголовки ответов от вашего 403? –