Ir para o conteúdo

Links de Entrada

Os desenvolvedores podem precisar vincular ao Vinyl a partir de fontes externas, como:

  • Outras aplicações
  • Mensagens Email
  • Portais
  • iframes

Esses links podem direcionar o usuário para o aplicativo padrão ou para um aplicativo específico. Eles podem permitir que o usuário escolha como autenticar ou iniciar o processo de login com um provedor de segurança específico. O desenvolvedor pode controlar esses comportamentos construindo os links de forma adequada.

Normalmente, ao vincular ao Vinyl, os desenvolvedores construirão uma URL para o diretório raiz do Vinyl. O URL pode ser parecido com isto:

https://example.com/Vinyl/

Este link assume que o Vinyl está hospedado em um diretório do Vinyl abaixo do diretório raiz do site. Em muitos casos, o Vinyl será hospedado na raiz do site.

Quando um usuário segue esse link, o Vinyl redireciona o navegador para o formulário de login. No entanto, se um provedor de autenticação externo tiver sido configurado como provedor de autenticação padrão, o Vinyl ignorará o formulário de login, redirecionando o navegador para o provedor de autenticação externo.

Independentemente disso, assim que o usuário fizer login com sucesso, o Vinyl determinará o aplicativo padrão apropriado com base nos privilégios do usuário. O Vinyl irá então redirecionar o navegador para a página inicial do aplicativo.

Um "link direto" é um URL que aponta para um aplicativo ou página específica. Um exemplo de link direto pode ser mais ou menos assim:

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

Neste exemplo, Vendas corresponde ao nome do aplicativo; Leads, o nome da página. Observe que estes são URL codificados de acordo com RFC 3986, seção 2 (https://tools.ietf.org/html/rfc3986#section-2).

O Vinyl oferece suporte a links diretos. Especificamente, os desenvolvedores podem construir links que apontam para um aplicativo ou página específica dentro do Vinyl. Tal como acontece com os links de nível superior que apontam para a raiz do site, o Vinyl determinará automaticamente se o usuário precisa se autenticar, redirecionando o navegador para o formulário de login ou provedor de autenticação externo. Assim que o usuário fizer login com sucesso, o Vinyl redirecionará o navegador para o URL do link direto.

A maneira mais simples de construir um link direto é navegar até a página de destino. A barra de endereço do navegador conterá um URL parecido com este:

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

A parte do URL que começa com o ponto de interrogação (?) é a string de consultar. O Vinyl usa a string de consultar para rastrear painéis e linhas selecionados, filtrar e critérios de pesquisa, etc. Remova a string de consultar para construir o URL canônico para a página.

String de Consulta Usada no URL

Ao construir a URL exata da página, o Vinyl faz o que precisa para manter todo o contexto da sua sessão. Em geral, existem diferentes componentes de uma determinada página do Vinyl que podem acabar incluídos como parte da string de consultar URL. Os componentes que terminam no URL podem incluir: Chaves Primárias, Nome da Página, Nome do Painel e Nome do Controle.

Dicas para Encurtar URL

Há casos em que o Vinyl gera uma URL muito longa para páginas. Nesta seção forneceremos algumas dicas gerais a serem consideradas para ajudar a encurtar o URL.

  • Defina suas chaves primárias. O Vinyl usará na URL o que considera PKs para rastrear os registros selecionados e, às vezes, o Vinyl usará todas ou a maioria das colunas se deixadas implícitas na regra. Por esse motivo, sempre certifique-se de encontrar as colunas exclusivas reais necessárias para identificar seu registro.

    • Se você decidir usar uma string mais longa como sua chave primária, saiba que ela ocupará mais espaço na URL
  • Mantenha seus Nomes abreviados para Página, Painéis e Controles. Se você precisar que eles sejam exibidos como valores de nomes mais longos, use o campo Label (que não será incluído como parte do URL de consultar )

Além das dicas listadas, pode valer a pena revisar as configurações do IIS pelo administrador do sistema. O IIS coloca algumas limitações no comprimento do URL por padrão, e algumas configurações são configuráveis para permitir URLs mais longos. As configurações a serem revisadas incluem:

  • maxAllowedContentLength - Tamanho máximo de upload de arquivo. O padrão é 30000000
  • maxUrl - Comprimento máximo do URL. O padrão é 4096
  • maxQueryString - Comprimento máximo da string de consultar de URL. O padrão é 2048

Consulte o artigo da Microsoft sobre Limites de solicitação <requestLimits> Para maiores informações.

Aviso

Alterar o nome de um aplicativo ou página quebrará os links diretos existentes.

Autenticação

Conforme observado acima, o Vinyl redirecionará automaticamente os usuários anônimos para o formulário de login ou para um provedor de autenticação externo. Na maioria dos cenários, este é o comportamento desejado. No entanto, pode haver situações que exijam que o usuário faça login em um provedor de segurança específico. Exemplos incluem:

  • O link direto aponta para uma página que requer uma autorização específica. Por exemplo, a página de destino pode exibir dados recuperados do Salesforce. Nesse caso, o usuário precisará se autenticar no Salesforce antes de acessar a página.
  • O usuário já foi autenticado com um provedor de logon único (SSO). Por exemplo, o usuário pode seguir um link dentro de um portal. Para acessar o portal, o usuário entrou com os Serviços de Federação do Active Directory (ADFS). Supondo que o Vinyl também esteja configurado para autenticar usuários via ADFS, o usuário pode efetivamente ignorar o formulário de login ao seguir o link.

URLs de Desafio

Para forçar os usuários a se autenticarem com um provedor de segurança específico, o link deve ser construído de forma a desencadear um desafio. O exemplo a seguir demonstra um desafio para um provedor de autenticação específico:

Para forçar os usuários a se autenticarem com um provedor de segurança específico, o link deve ser construído de forma a desencadear um desafio. O exemplo a seguir demonstra um desafio para um provedor de autenticação específico:

Iremos nos referir a isso como URL do desafio. O URL do desafio é construído em:

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

Onde:

  • <vinyl-root> - Este é o URL absoluto para o diretório raiz do aplicativo Web Vinyl. Não inclui a barra final. Neste exemplo, raiz de Vinyl é https://example.com/Vinyl.
  • <provider-name> - Este é o nome do provedor de segurança conforme definido no Vinyl. No exemplo acima, o nome do provedor é SAML. Observe que o nome do provedor deve ser codificado em URL.
  • <response-url> - Este é o URL de retorno de chamada do aplicativo Web Vinyl. Não é o link direto. O URL de resposta precisa ser codificado em URL.

No exemplo acima, a decodificação do URL de resposta produz:

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

O URL de resposta é composto por:

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

Onde:

  • <vinyl-root> - URL absoluta da raiz da aplicação web Vinyl. Veja acima.
  • <relative-link> - Esta é a parte relativa à raiz do aplicativo Web Vinyl do link direto. É codificado por URL.

No exemplo acima, o link relativo é:

%2Fapp%2FSales%2FLeads

A decodificação do link relativo nos dá:

/app/Sales/Leads

Conforme observado acima, isso é relativo ao diretório raiz do aplicativo Web Vinyl (ou seja, Vinyl-root).

Construindo um URL de Desafio

Para construir uma URL de desafio, precisamos reverter o processo.

Etapa 1) Comece com o link direto e remova a raiz do Vinyl para obter o link relativo. Deve começar com /app. URL codificou o link relativo.

Etapa 2) Construa o URL de resposta a partir de:

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

URL codifica URL de resposta.

Etapa 3) Construa o URL do desafio a partir de:

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

Fiddle para Gerar o URL do Desafio

O seguinte JSFiddle pode ser usado para gerar uma URL de desafio:

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());