Crear complementos de SharePoint que usen la biblioteca entre dominios

En algunos escenarios, un complemento de SharePoint no podrá usar sistemas de autorización de baja confianza ni de elevada confianza; o bien es posible que no sea buena idea usarlos como único medio para que el complemento obtenga autorización a los recursos de SharePoint.

Ejemplos:

  • Los componentes remotos del complemento de SharePoint no son locales, pero un firewall corporativo bloquea las comunicaciones de servidor a servidor entre SharePoint y ACS, lo cual impide usar el sistema de baja confianza.

  • El complemento de SharePoint se ha diseñado como aplicación web de página única que emplea JavaScript del lado cliente para las operaciones de datos con SharePoint.

  • El Complemento de SharePoint emplea, principalmente, llamadas de servidor a servidor para obtener acceso a los datos de SharePoint (y recibe la autorización de los sistemas de confianza baja o de elevada confianza), pero necesita complementarse con algunas llamadas de JavaScript. Por ejemplo, una página con gran cantidad de gráficos puede usar JavaScript para hacer pequeñas actualizaciones en los datos mostrados sin tener que volver a cargar toda la página.

Pero, por razones de seguridad, los exploradores no permiten que el código de JavaScript que se hospeda en un dominio tenga acceso a los recursos de otro dominio, por lo que se necesita una técnica especial para permitir que la instancia remota de JavaScript tenga acceso a los recursos de SharePoint. La biblioteca JavaScript entre dominios de SharePoint facilita el uso de la técnica por parte de su aplicación web remota.

Nota:

La biblioteca entre dominios se usa también para obtener acceso a los datos en sentido contrario; es decir, para permitir que el código de JavaScript de una página de SharePoint tenga acceso a los datos de un dominio remoto. Para obtener más información, vea Obtener acceso a datos remotos desde una página de SharePoint.

Información sobre la arquitectura de la biblioteca entre dominios

La biblioteca entre dominios de SharePoint se incluye en el archivo SP RequestExecutor.js, que se encuentra en la carpeta virtual /_layouts/15/ de todos los sitios web de SharePoint. Los scripts de este archivo encapsulan una técnica segura y conocida para solucionar la restricción del explorador impuesta en el scripting entre dominios: un iFrame puede comunicarse con su página primaria por medio de la función window.postMessage() aunque la página del iFrame esté en otro dominio. Por lo que las solicitudes de datos y las respuestas se transmiten a través del límite del dominio haciendo llamadas a postMessage().

Advertencia

La función postMessage() solo funciona con exploradores compatibles con HTML 5, por lo que los complementos de SharePoint que usen la biblioteca entre dominios no funcionarán en los exploradores anteriores.

En SharePoint, la biblioteca entre dominios se carga en una página de la aplicación web remota donde se crea un iFrame oculto que hospeda una página de proxy especial del dominio de SharePoint. La página de proxy ya existe en todos los sitios web de SharePoint.

La biblioteca se usa para crear un objeto de Notación de objetos de JavaScript (JSON) que contiene toda la información necesaria para hacer una llamada CRUD a las API de REST de SharePoint. El objeto JSON se pasa a la página de proxy mediante postMessage(). En la página de proxy, donde la biblioteca también está cargada, el objeto de JSON se analiza y reconstruye como llamada de REST a SharePoint. Dado que la página de proxy está en el dominio de SharePoint, el explorador permite la llamada.

Los componentes remotos del Complemento de SharePoint seguirán teniendo que recibir autorización para obtener acceso a los recursos de SharePoint. Esto se puede hacer de dos formas:

  • Establecer el tipo de la entidad de seguridad del complemento en RemoteWebApplication (el valor predeterminado para las aplicaciones hospedadas por el proveedor) en el manifiesto de complemento. Cuando el complemento se registra con ACS, en el registro se incluye el dominio de la aplicación web remota. SharePoint confía en los dominios registrados con ACS, aunque en este escenario no se usa ninguno de los flujos de transmisión de tokens que forman parte del sistema de baja confianza del lado servidor. Para obtener más información sobre el registro de complementos, vea Registrar complementos de SharePoint.

  • En un complemento hospedado por SharePoint, se puede dejar el tipo de entidad de seguridad del complemento establecido en el valor predeterminado, que es Internal. Puede establecer el atributo AllowedRemoteHostUrl del elemento Internal en la dirección URL de la aplicación web remota, como puede verse en el ejemplo siguiente.

  <AppPrincipal>
    <Internal AllowedRemoteHostUrl="https://example.com/Home.html" />
  </AppPrincipal>

Nota:

Si usa la segunda opción (una entidad de seguridad de complemento Internal), solo podrá usar JavaScript y la biblioteca entre dominios para obtener acceso a SharePoint. El modelo de objetos de cliente de SharePoint está bloqueado para los complementos de SharePoint de tipo Internal, por lo que no puede tener un sistema de autorización doble que use tanto la biblioteca entre dominios como los sistemas de baja confianza o de elevada confianza.

Para obtener más información sobre cómo usar la biblioteca, vea Obtener acceso a datos de SharePoint desde complementos con la biblioteca entre dominios.

Obtener acceso a datos remotos desde una página de SharePoint

La biblioteca entre dominios de SharePoint también se puede usar en sentido contrario; es decir, JavaScript en una página de SharePoint puede usar la biblioteca para obtener datos de los componentes remotos del complemento. Para ello, hay que invertir la arquitectura entre dominios: cree una página de proxy en la aplicación web remota. La biblioteca se invoca desde una página de SharePoint donde se crea un iFrame para hospedar la página de proxy.

Para obtener más información sobre cómo usar la biblioteca de esta forma, vea Crear una página de proxy personalizada para la biblioteca entre dominios en SharePoint.

Ver también