Saltar al contenido

Enlaces de ingreso en Jitterbit App Builder

Introducción

Los desarrolladores pueden necesitar enlazar a App Builder desde fuentes externas como las siguientes:

  • Otras aplicaciones
  • Mensajes de correo electrónico
  • Portales
  • iframes

Estos enlaces pueden dirigir al usuario a la aplicación predeterminada o a una aplicación específica. Pueden permitir al usuario elegir cómo autenticarse o iniciar el proceso de inicio de sesión con un proveedor de seguridad específico. El desarrollador puede controlar estos comportamientos construyendo los enlaces de manera apropiada.

Típicamente, al enlazar a App Builder, los desarrolladores construirán una URL al directorio raíz de App Builder. La URL podría verse algo así:

https://example.com/Vinyl/

Este enlace asume que App Builder está alojado en un directorio Vinyl debajo del directorio raíz del sitio web. En muchos casos, App Builder estará alojado en el raíz del sitio web.

Cuando un usuario sigue un enlace así, App Builder redirigirá el navegador al formulario de inicio de sesión. Sin embargo, si se ha configurado un proveedor de autenticación externo como el Proveedor de Autenticación Predeterminado, App Builder omitirá el formulario de inicio de sesión, redirigiendo el navegador al proveedor de autenticación externo en su lugar.

De todos modos, una vez que el usuario haya iniciado sesión con éxito, App Builder determinará la aplicación predeterminada apropiada según los privilegios del usuario. App Builder luego redirigirá el navegador a la página de inicio de la aplicación.

Un "enlace profundo" es una URL que apunta a una aplicación o página específica. Un ejemplo de un enlace profundo podría verse algo así:

https://example.com/Vinyl/app/Sales/Leads

En este ejemplo, Sales corresponde al nombre de la aplicación; Leads, al nombre de la página. Tenga en cuenta que estos están codificados en URL según RFC 3986, sección 2 (https://tools.ietf.org/html/rfc3986#section-2).

App Builder admite enlaces profundos. Específicamente, los desarrolladores pueden construir enlaces que apunten a una aplicación o página específica dentro de App Builder. Al igual que con los enlaces de nivel superior que apuntan al raíz del sitio web, App Builder determinará automáticamente si el usuario necesita autenticarse, redirigiendo el navegador al formulario de inicio de sesión o al proveedor de autenticación externo. Una vez que el usuario haya iniciado sesión con éxito, App Builder redirigirá el navegador a la URL del enlace profundo.

La forma más sencilla de construir un enlace profundo es navegar a la página de destino. La barra de direcciones del navegador contendrá una URL que se verá algo así:

https://example.com/Vinyl/app/Sales/Leads?$activepanel=Leads&Leads.LeadId=123456

La parte de la URL que comienza con el signo de interrogación (?) es la cadena de consulta. App Builder utiliza la cadena de consulta para rastrear los paneles y filas seleccionados, criterios de filtrado y búsqueda, etc. Elimina la cadena de consulta para construir la URL canónica de la página.

Cadena de consulta utilizada en la URL

Al construir la URL exacta de la página, App Builder hace lo necesario para mantener todo el contexto de tu sesión. En general, hay diferentes componentes de una página de App Builder que pueden terminar incluidos como parte de la URL de la cadena de consulta. Los componentes que terminan en la URL pueden incluir: Claves Primarias, Nombre de la Página, Nombre del Panel y Nombre del Control.

Consejos para acortar la URL

Hay ocasiones en las que App Builder genera una URL muy larga para las Páginas. En esta sección proporcionaremos algunos consejos generales a considerar para ayudar a acortar la URL.

  • Define tus Claves Primarias. App Builder utilizará en la URL lo que considera como PKs para hacer un seguimiento de los registros seleccionados, y a veces App Builder utilizará todas o la mayoría de las columnas si se dejan implícitas en la regla. Por esta razón, asegúrate siempre de encontrar las columnas únicas reales necesarias para identificar tu registro.

    • Si decides usar una cadena más larga como tu Clave Primaria, ten en cuenta que ocupará más espacio en la URL.
  • Mantén tus Nombres cortos para Página, Paneles y Controles. Si necesitas que se muestren como valores de nombre más largos, utiliza el campo Etiqueta (que no se incluirá como parte de la URL de consulta).

Además de los consejos enumerados, puede ser útil que tu Administrador del Sistema revise la configuración de IIS. IIS impone algunas limitaciones en la longitud de la URL por defecto, y algunas configuraciones son configurables para permitir URLs más largas. Las configuraciones a revisar incluyen:

  • maxAllowedContentLength: Tamaño máximo de carga de archivos. Por defecto es 30000000.
  • maxUrl: Longitud máxima de la URL. Por defecto es 4096.
  • maxQueryString: Longitud máxima de la cadena de consulta de la URL. Por defecto es 2048.

Ve el artículo de Microsoft sobre Límites de Solicitud <requestLimits> para más información.

Advertencia

Cambiar el nombre de una aplicación o página romperá los enlaces profundos existentes.

Autenticación

Como se mencionó anteriormente, App Builder redirigirá automáticamente a los usuarios anónimos al formulario de inicio de sesión o a un proveedor de autenticación externo. En la mayoría de los escenarios, este es el comportamiento deseado. Sin embargo, puede haber situaciones que requieran que el usuario inicie sesión con un proveedor de seguridad específico. Algunos ejemplos incluyen:

  • El enlace profundo apunta a una página que requiere una autorización específica. Por ejemplo, la página de destino puede mostrar datos recuperados de Salesforce. En este caso, el usuario necesitará autenticarse con Salesforce antes de acceder a la página.
  • El usuario ya se ha autenticado con un proveedor de inicio de sesión único (SSO). Por ejemplo, el usuario puede seguir un enlace dentro de un portal. Para acceder al portal, el usuario inició sesión con Active Directory Federation Services (ADFS). Suponiendo que App Builder también esté configurado para autenticar usuarios a través de ADFS, el usuario puede eludir efectivamente el formulario de inicio de sesión al seguir el enlace.

URLs de Desafío

Para obligar a los usuarios a autenticarse con un proveedor de seguridad específico, el enlace debe construirse de tal manera que active un desafío. El siguiente ejemplo demuestra un desafío para un proveedor de autenticación específico:

Nos referiremos a esto como la URL de desafío. La URL de desafío se construye de la siguiente manera:

<vinyl-root>/service/authentication/external?provider=<provider-name>&returnUrl=<response-url>

Donde:

  • <vinyl-root>: Esta es la URL absoluta al directorio raíz de la aplicación web de App Builder. No incluye la barra diagonal final. En este ejemplo, vinyl-root es https://example.com/Vinyl.
  • <provider-name>: Este es el nombre del proveedor de seguridad tal como se define dentro de App Builder. En el ejemplo anterior, provider-name es SAML. Tenga en cuenta que provider-name debe estar codificado en URL.
  • <response-url>: Esta es la URL de callback de la aplicación web de App Builder. No es el enlace profundo. La response-url necesita estar codificada en URL.

En el ejemplo anterior, decodificar la response-url produce:

https://example.com/Vinyl/auth/authenticated?returnUrl=%2Fapp%2FSales%2FLeads

La response-url está compuesta por lo siguiente:

<vinyl-root>/auth/authenticated/?returnUrl=<relative-link>

Donde:

  • <vinyl-root>: URL absoluta de la raíz de la aplicación web App Builder (ver arriba).
  • <relative-link>: Esta es la porción relativa a la raíz de la aplicación web App Builder del enlace profundo. Está codificada en URL.

En el ejemplo anterior, el relative-link es el siguiente:

%2Fapp%2FSales%2FLeads

Decodificando el relative-link obtenemos:

/app/Sales/Leads

Como se mencionó anteriormente, esto es relativo al directorio raíz de la aplicación web App Builder (vinyl-root en este ejemplo).

Construyendo una URL de desafío

Para construir una URL de desafío, necesitamos invertir el proceso:

  1. Comienza con el enlace profundo y elimina vinyl-root para obtener relative-link. Debe comenzar con /app. Codifica en URL el relative-link.

  2. Construye la response-url a partir de lo siguiente:

    <vinyl-root>/auth/authenticated/?returnUrl=<relative-link>
    

    Codifica en URL response-url.

  3. Construye la challenge-url a partir de lo siguiente:

    <vinyl-root>/service/authentication/external?provider=<provider-name>&returnUrl=<response-url>
    

JSFiddle para generar la URL de desafío

El siguiente JSFiddle se puede usar para generar una URL de desafío:

https://jsfiddle.net/8s8gkufh/1/

HTML

Link:<br>
<input data-bind="value: link"><br>
Provider<br>
<input data-bind="value: provider"><br>
Challenge URL:
<input data-bind="value: challenge" readonly>

JavaScript

function ViewModel() {
  this.link = ko.observable("http://example.com/Vinyl/app/Northwind");
  this.provider = ko.observable("SAML");

  var startOfRelativeLink = ko.computed(function() {
    return this.link().indexOf("/app");
  }, this);

  var root = ko.computed(function() {
    return this.link().substr(0, startOfRelativeLink());
  }, this);

  var relativeLink = ko.computed(function() {
    return this.link().substr(startOfRelativeLink());
  }, this);

  var response = ko.computed(function() {
    return root() + "/auth/authenticated?returnUrl=" + encodeURIComponent(relativeLink());
  }, this);

  this.challenge = ko.computed(function() {
    return root() + "/service/authentication/external?provider=" + encodeURIComponent(this.provider()) + "&returnUrl=" + encodeURIComponent(response());
  }, this);
}

ko.applyBindings(new ViewModel());