При использовании Office 365 SharePoint REST API в приложении Rails происходит сбой токена доступа

#rest #ruby-on-rails-4 #ms-office #sharepoint-2013 #office365

#rest #ruby-on-rails-4 #ms-office #sharepoint-2013 #офис365

Вопрос:

Я пытаюсь использовать организационный сайт SharePoint Office 365 в качестве точки хранения через SharePoint REST API для файлов docx, созданных в приложении Rails. Я зарегистрировал приложение https://<domain>.sharepoint.com/_layouts/15/appregnex.aspx и получил client_id и client_secret. Используя https://<domain>.sharepoint.com/_layouts/15/appinv.aspx , я предоставил приложению следующие разрешения:

 <AppPermissionRequests AllowAppOnlyPolicy="true">
  <AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="FullControl" />
</AppPermissionRequests>
 

Используя драгоценный камень oauth2, мне до сих пор удавалось получить токен доступа с помощью client_credentials:

 client = OAuth2::Client.new(<client_id>, <client_secret>, site: "https://<domain>.sharepoint.com", token_url: "https://login.windows.net/<tenant_id>/oauth2/token")
token = client.get_token(grant_type: "client_credentials", client_id: client.id, client_secret: client.secret, resource: "https://<domain>.sharepoint.com")
 

Стратегия client_credentials, похоже, работает, поскольку токен получен. Однако попытка его использования приводит к сбою.

token.get("/_api/web/title") ВОЗВРАТ OAuth2::Error: { "error_description" : "The server was unable to process the request due to an internal error. For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework SDK documentation and inspect the server trace logs." }

RestClient.get("https://<domain>.sharepoint.com/_api/web/title", { "Authorization" => token.token }) ВОЗВРАТ RestClient::Unauthorized: 401 Unauthorized

Я в значительной степени в недоумении по этому поводу, и я близок к тому, чтобы сказать своему боссу, что если это можно как-то сделать, я просто недостаточно осведомлен, чтобы это сделать.

Ответ №1:

IncludeExceptionDetailInFaults Это параметр службы wcf в endpoint applications web.config. Если у вас есть доступ к серверу https://.sharepoint.com затем вы можете включить это на мгновение. По сути, это отправит клиенту дамп трассировки исключения в ответе. По умолчанию любые ошибки состояния 500 возвращаются без информации, кроме …упс, произошла ошибка.

Я не знаю, как настроен этот сервер или что вообще касается SharePoint. Однако ошибка может быть любой мыслимой и даже не связанной с oauth. Если вы не сможете получить журнал сервера или вернуть исключение, вы будете вращать свои колеса.

Комментарии:

1. Что сказал @EugenioPace, я не думаю, что смогу что-то изменить, поскольку это сервер SharePoint Online, а не локальная установка.

Ответ №2:

Очень вероятно, что у вас нет достаточных разрешений. Попробуйте использовать разные области применения.

Комментарии:

1. (Позвольте мне предварить это, сказав, как сильно я просто люблю документацию MSDN.) Я просто попытался предоставить разрешения FullControl AppOnly для http://sharepoint/content/sitecollection/web и http://sharepoint/content/tenant , и просто для пинки, я также добавил версии https. Никаких кубиков. Если есть другие области разрешений, которые можно добавить, я не смог найти документацию для этого.

2. Я вас слышу:-( У меня нет с собой образца, чтобы перепроверить. Я не могу точно вспомнить, но я помню, что у меня была такая же (или очень похожая) проблема.