Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При создании надстроек SharePoint обычно необходимо объединять данные из различных источников. Тем не менее, из соображений безопасности существуют механизмы блокировки, которые препятствуют связи более чем с одним доменом одновременно.
Вы можете использовать междоменную библиотеку для доступа к данным в удаленной надстройке, если реализуете настраиваемую прокси-страницу, размещенную в инфраструктуре удаленной надстройки. Как разработчик вы отвечаете за реализацию настраиваемой прокси-страницы и пользовательской логики, например, за механизм проверки подлинности для удаленной надстройки. Используйте междоменную библиотеку с настраиваемой прокси-страницей, если необходимо, чтобы взаимодействие происходило на уровне клиента.
Необходимые условия для использования примеров в этой статье
Вам необходима среда разработки, описанная в статье Создание надстроек SharePoint, размещаемых у поставщика.
Ключевые понятия, с которыми необходимо ознакомиться перед использованием настраиваемой страницы прокси вместе с надстройками SharePoint
Ниже перечислены полезные статьи, в которых описано, как запрашивать данные для надстроек SharePoint из удаленного домена.
Название статьи | Описание |
---|---|
Надстройки SharePoint | Сведения о новой модели надстроек в SharePoint, с помощью которой можно создавать небольшие и удобные в использовании надстройки для пользователей. |
Безопасный доступ к данным и клиентские объектные модели для надстроек SharePoint | Узнайте о параметрах доступа к данным в Надстройки SharePoint. В этой статье представлена информация об альтернативах высокого уровня при работе с данными в надстройке. |
Хост-сайты, сайты надстроек и компоненты SharePoint в SharePoint | Узнайте, в чем разница между хост-сайтами и сайтами надстроек. Узнайте, какие компоненты SharePoint можно включать в надстройку для SharePoint, какие компоненты разворачиваются на хост-сайте, какие компоненты разворачиваются на сайте надстройки, и как выполняется развертывание сайта надстройки в изолированном домене. |
Междоменная безопасность на стороне клиента | Изучите междоменные угрозы и примеры использования, а также принципы безопасности для междоменных запросов, и оцените риски разработчиков, связанные с улучшением междоменного доступа из веб-приложений, которые запускаются в браузере. |
Пример кода. Доступ к удаленным данным с помощью настраиваемой прокси-страницы для междоменной библиотеки
Чтобы прочесть данные из удаленной службы, выполните указанные ниже действия.
Создайте проект надстройки для SharePoint.
Измените манифест надстройки, чтобы разрешить связь с удаленной надстройкой.
Создать настраиваемую прокси-страницу и страницу контента в веб-проекте.
Создать страницу, которая использует междоменную библиотеку в проекте Надстройка SharePoint.
Создание проекта надстройки SharePoint
Откройте Visual Studio от имени администратора. (Для этого щелкните правой кнопкой мыши значок Visual Studio в меню Пуск и выберите Запуск от имени администратора.)
Создайте надстройку SharePoint с размещением у поставщика, как описано в этой статье, и назовите ее ProxyPageApp.
Изменение файла манифеста надстройки
В обозревателе решений щелкните правой кнопкой мыши файл AppManifest.xml и выберите Просмотреть код.
Замените весь элемент AppPrincipal указанным ниже фрагментом.
<AppPrincipal> <Internal AllowedRemoteHostUrl="~remoteAppUrl"/> </AppPrincipal>
Примечание.
Атрибут AllowedRemoteHostUrl используется для указания удаленного домена. ~remoteAppUrl принимает значение URL-адреса удаленной надстройки. Дополнительные сведения о маркерах см. в статье Изучение структуры манифеста приложения и пакета надстройки SharePoint.
Создание настраиваемой страницы прокси
После создания решения Visual Studio щелкните правой кнопкой мыши проект веб-приложения (не проект надстройки SharePoint) и выберите Добавить>Новый элемент>Интернет>Веб-форма, чтобы добавить новую веб-форму. Присвойте форме имя Proxy.aspx.
В файле Proxy.aspx замените весь HTML-элемент и его дочерние элементы следующим HTML-кодом. Оставьте всю разметку над HTML-элементом без изменений. HTML-код содержит разметку и скрипт JavaScript, который выполняет следующие задачи:
Предоставляет заполнитель для файла междоменной библиотеки JavaScript.
Извлекает URL-адрес сайта надстройки из источника ссылки.
Динамически загружает файл JavaScript междоменной библиотеки в заполнитель.
Предоставляет параметры для объекта RequestExecutorMessageProcessor.
Инициализирует объект RequestExecutorMessageProcessor.
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="X-UA-Compatible" content="IE=8" /> <title>Custom Proxy Host Page</title> <script src="http://ajax.aspnetcdn.com/ajax/4.0/1/MicrosoftAjax.js" type="text/javascript"> </script> <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js"> </script> <!-- Script to load the cross-domain library js file --> <script type="text/javascript"> var hostweburl; $(document).ready(function(){ //Get the URI decoded host web URL. hostweburl = decodeURIComponent( getQueryStringParameter("SPHostUrl") ); // The cross-domain js file is in a URL in the form: // host_web_url/_layouts/15/SP.RequestExecutor.js var scriptbase = hostweburl + "/_layouts/15/"; // Load the js file $.getScript(scriptbase + "SP.RequestExecutor.js", initCustomProxy); }); //Function to initialize the custom proxy page // must set the appropriate settings and implement // proper authentication mechanism function initCustomProxy() { var settings = { originAuthorityValidator: function (messageOriginAuthority) { // This page must implement the authentication for the // remote add-in. // You should validate if messageOriginAuthority is // an approved domain to receive calls from. return true; } }; SP.RequestExecutorMessageProcessor.init(settings); } // Function to retrieve a query string value. // For production purposes you may want to use // a library to handle the query string. function getQueryStringParameter(paramToRetrieve) { var params = document.URL.split("?")[1].split("&"); var strParams = ""; for (var i = 0; i < params.length; i = i + 1) { var singleParam = params[i].split("="); if (singleParam[0] == paramToRetrieve) return singleParam[1]; } } </script> </head> <body> </body> </html>
Важно!
В производственной надстройке SharePoint необходимо предоставить логику авторизации и вернуть соответствующее значение в объект originAuthorityValidator в параметрах.
Создание страницы содержимого
Щелкните правой кнопкой мыши проект веб-приложения в Обозреватель решений и добавьте новую веб-форму, выбрав Добавить>веб-форму>нового элемента>. Назовите форму Content.aspx.
Скопируйте следующий код и вставьте его в метод Page_Load в файл с выделенным кодом. Этот код выполняет следующие задачи.
Устанавливает для content-type значение text/plain.
Записывает контент в выходной буфер.
Завершает подключение.
string content; content = "Just some text."; Response.ContentType="text/plain"; Response.Write(content); Response.End();
Создание веб-страницы SharePoint, использующей междоменную библиотеку
Щелкните правой кнопкой мыши проект надстройки SharePoint и выберите Добавить>Новый элемент>Office/SharePoint>Модуль.
Присвойте модулю имя Pages и нажмите Добавить.
Щелкните папку Pages правой кнопкой мыши и выберите Добавить>Новый элемент>Office/SharePoint>Страница.
Задайте для страницы имя Home.aspx и нажмите кнопку Добавить.
Если страница Home.aspx не открылась автоматически, откройте ее.
Скопируйте указанный ниже код и вставьте его в тег содержимого PlaceHolderMain.
<!-- The page dynamically loads the cross-domain library's js file, rescript acts as the placeholder. --> <script type="text/javascript" id="rescript" src="../_layouts/15/SP.RequestExecutor.js"> </script> Data from the remote domain: <span id="TextData"></span> <!-- Main script to retrieve the host web's title --> <script type="text/javascript"> (function () { var executor; var hostweburl; var remotedomain; remotedomain = "<your_remote_add-in_domain>"; //Get the URI decoded host web URL. hostweburl = decodeURIComponent( getQueryStringParameter("SPHostUrl") ); // Initialize the RequestExecutor with the custom proxy URL. executor = new SP.RequestExecutor(remotedomain); executor.iFrameSourceUrl = "Proxy.aspx?SPHostUrl=" + hostweburl; // Issue the call against the remote endpoint. // The response formats the data in plain text. // The functions successHandler and errorHandler attend the // sucess and error events respectively. executor.executeAsync( { url: remotedomain + "Content.aspx", method: "GET", headers: { "Accept": "text/plain" }, success: successHandler, error: errorHandler } ); })(); // Function to handle the success event. // Prints the data to the placeholder. function successHandler(data) { document.getElementById("TextData").innerText = data.body; } // Function to handle the error event. // Prints the error message to the page. function errorHandler(data, errorCode, errorMessage) { document.getElementById("TextData").innerText = "Could not complete cross-domain call: " + errorMessage; } // Function to retrieve a query string value. // For production purposes you may want to use // a library to handle the query string. function getQueryStringParameter(paramToRetrieve) { var params = document.URL.split("?")[1].split("&"); var strParams = ""; for (var i = 0; i < params.length; i = i + 1) { var singleParam = params[i].split("="); if (singleParam[0] == paramToRetrieve) return singleParam[1]; } } </script>
В вставленном выше коде найдите строку
remotedomain = "<your_remote_add-in_domain>";
и замените заполнитель <your_remote_add-in_domain> URL-адресом localhost, который используется веб-приложением при запуске надстройки с F5 в Visual Studio. Для этого выберите проект веб-приложения в обозревателе решений. Свойство URL-адреса находится в области Свойства . Используйте все значение, включая протокол, порт и закрывающая косая черта; напримерhttp://localhost:45072
.Сохраните и закройте файл.
Откройте файл appmanifest.xml и задайте для параметра Начальная страница значение ProxyPageApp/Pages/Home.aspx.
Сборка и запуск решения
Убедитесь, что проект надстройки SharePoint выбран как запускаемый проект.
Нажмите клавишу F5.
Примечание.
При нажатии клавиши F5 Visual Studio выполняет сборку решения, развертывает надстройку и открывает страницу разрешений.
Нажмите кнопку Доверять.
Откроется домашняя страница, и она должна выглядеть следующим образом. Может потребоваться несколько секунд, чтобы появилась фраза "Just some text", так как она извлекается со страницы Content.aspx удаленного домена.
Устранение неполадок в решении
Проблема | Решение |
---|---|
Visual Studio не открывает браузер после нажатия клавиши F5. | Сделайте проект надстройки SharePoint запускаемым. |
Необработанное исключение SP не определен. | Убедитесь, что у вас есть доступ к файлу SP.RequestExecutor.js в окне браузера. |