2015-07-26 5 views
0

Я пытаюсь сделать некоторые интересные вещи с унифицированным API Office 365 (предварительный просмотр) и застрял на данный момент с авторизацией. Я сделал приложение со всеми разрешениями, которые мне нужны enter image description hereOffice 365 унифицированный API (предварительный просмотр) запросов ошибка 401

Я пытаюсь войти в систему пользователей с URL "https://login.windows.net/common/oauth2/authorize?response_type=code&client_id= {CLIENT_ID} & ресурс = https://graph.microsoft.com/"

Evething работает хорошо.

Я даже могу получить access_token со всеми областями по запросу до https://login.windows.net/common/oauth2/token.

enter image description here

НО! У меня проблема, я не могу получить информацию о пользователе и не могу получить его файлы.

Я попытался сделать запросы как это: enter image description here

Я всегда просто получить статус HTTP 401 Несанкционированное.

Что я делаю неправильно?

ТАКЖЕ Вопрос о возможностях с унифицированным API. Моя цель - загрузить большие файлы (до 1 ГБ). Возможно ли с помощью унифицированного API? Я не могу найти что-либо в документации, но обнаружил, что это невозможно с OneDrive для Business API (максимальный размер файла составляет 100 МБ).

+0

Можете ли вы добавить дополнительную информацию о конкретных областях, которые вы добавляете? Для доступа к информации пользователя требуется User.Read (как минимум). Для доступа к файлам пользователя вам нужны файлы. Читайте. Прямо сейчас вы не сможете загружать большие файлы, эта возможность скоро появится. –

+0

Я попытался добавить ВСЕ области, но это не сработает. – KardanovIR

+0

Привет, Карданов. Можете ли вы рассказать мне, работает ли для вас следующая ссылка? https://graphexplorer2.azurewebsites.net/?UrlRequest=GET&text=https%3A%2F%2Fgraph.microsoft.com%2Fbeta%2Fme%2Ffiles –

ответ

2

Так борется с той же проблемой ранее сегодня: всегда получали 401 Несанкционированные или другие ошибки. Затем я натолкнулся на этот ответ: Building a multi-tenant app for SharePoint Online O365

Вот оно: это очень противоречиво, но ответ был тот, что после получения маркера для URL-адреса обнаружения и выполнения обнаружения службы вам нужно получить токен для каждого serviceResourceId, хотите позвонить. Здесь есть два чрезвычайно важных момента, которые почти 8 часов чтения документации не делают явным ясным.

КАЖДЫЙ СЕРВИС РЕСУРС ID ИМЕЕТ РАЗНЫЕ СИМВОЛ

Первый пункт очень запутанным: Я предполагаю, что его сделали так, потому что отдельные приложения арендатора работают на отдельных кластерах и Microsoft решила не иметь служба единого органа. Каждая другая реализация, выполняющая многопользовательскую работу (например, реализация Google Apps), дает вам один токен, который переносит ВСЕ ваши разрешения в один мяч.

ВЫ ЗВОНИТЕ лексема Службы поиска НЕСКОЛЬКО РАЗ С ТЕМ ЖЕ КОД

Это НЕВЕРОЯТНО нелогичным (я использую смелые колпачков на цели). В Интернете нет других сервисов OAuth2 (и я лично написал код для 30 реализаций OAuth2), где вы можете вызывать услугу поиска токенов несколько раз с тем же кодом и не получать ошибку. Это полностью противоречит всем ожиданиям по умолчанию, и это серьезный отказ в документации, который он не более четко прописал как отклонение от стандартной практики.

Я скажу это еще раз: нет, где еще во всем Интернете вы можете использовать один и тот же код OAuth2 более одного раза, чтобы получить токен доступа. Это то, что должно быть вызвано ПРОДВИЖНО по документации и просто нет.

Если вы по-прежнему иметь эту проблему, вы должны сделать это с кодом oauth2 вернулся:

  1. Получить маркер маркер доступа с использованием кода и добавления запроса параметр «ресурс» = «https://api.office.com/discovery/» (закрытие слэш важен)
  2. вызова URL-адрес https://api.office.com/discovery/v2.0/me/services ", используя заголовок авторизации установить на маркер, полученном на этапе # 1. Это будет возвращать объект JSON, с значения поля а. поле значения будет массивом услуги, для которых этот код будет возвращать токены доступа. Каждый объект в массиве значений будет иметь свойство serviceResourceId.
  3. Для каждого объекта вам нужно будет получить еще один токен доступа, используя тот же код, который вы использовали в шаге 1, но с ресурсом, установленным в serviceResourceId.

Код с шага 3 фактически предоставит вам доступ к конечной точке арендатора, которую вы хотите. 3.

+0

Большое вам спасибо за этот ответ! – Steve

+0

В качестве побочного примечания, поскольку есть, вероятно, какой-то общий знаменатель, хотя я говорю о on-prem, заключается в том, что на ASP.NET вы можете сделать то же самое, что и по умолчанию, он не защищает от повторных атак. Вам необходимо специально включить обнаружение повторения Token https://msdn.microsoft.com/en-us/library/jj161103(v=vs.110).aspx. –

0

Я бы попробовал изменить заголовок «Принять» на «application/json; odata.metadata = minimal». odata.metadata = none не отображается в списке поддерживаемых типов MIME для унифицированного API.

Поддерживаемый тип (ы), как возвратить в FIDDLER «приложения/JSON; odata.metadata = минимальна; odata.streaming = TRUE; IEEE754Compatible = ложь, применение/JSON; odata.metadata = минимальна; odata.streaming = true, IEEE754Compatible = true, application/json; odata.metadata = minimum; odata.streaming = true, application/json; odata.metadata = minimum; odata.streaming = false; IEEE754Compatible = false, application/json; odata.metadata = минимальный: odata.streaming = false; IEEE754Compatible = true, application/json; odata.metadata = минимальный; odata.streaming = false, application/json; odata.metadata = минимальный, IEEE754Compatible = false, application/json; odata.metadata = минимальный: IEEE754Compatible = true, application/json; odata.metadata = minimum, application/json; odata.metadata = full; odata.streaming = true; IEEE754Compatible = false, application/json; odata.metadata = full; odata.streaming = правда, IEEE754Compatible = тр ue, application/json; odata.metadata = full; odata.streaming = true, application/json; odata.metadata = full; odata.streaming = false; IEEE754Compatible = false, application/json; odata.metadata = full; odata. streaming = false; IEEE754Compatib ... 'не соответствует ни одному из приемлемых приложений MIME-типов/json; odata = verbose '

Смежные вопросы