Faça login automaticamente no site atual se o usuário estiver logado em outro site

Tenho cerca de 100 sites codificados no clássico ASP. Cada site aceita pedidos e os armazena no database. No entanto, o pagamento dessas ordens deve ser feito em outro site, também codificado no clássico ASP. Todos os sites são de propriedade da mesma empresa, hospedados no mesmo servidor do IIS e usam o mesmo database do SQL Server.

Agora, o usuário registra-se ao inserir algumas informações pessoais e faz logon em um desses sites (por exemplo, website-for-newjersey.com) e faz um pedido. Ele é redirecionado para o site de pagamentos (payments.master-website.com em https) onde algumas de suas informações pessoais (endereço, cidade, estado para envio, nome para o nome do titular do cartão de crédito, etc.) aparecem no formulário de pagamento. As informações específicas do cartão de crédito são inseridas nessa página.

Devido à sensibilidade da informação mostrada nessa página, o usuário deve entrar no site de pagamento antes de poder ver o formulário de pagamento pré-preenchido . E não quero que o usuário faça o login duas vezes (uma vez em cada site). Existe uma maneira confiável de verificar se o usuário está logado no site de referência usando ASP clássico.


Longa história curta

  • No site, BI precisa verificar se o visitante está logado no site A
  • No site, BI precisa da variável de session ID do site A
  • Ambos os sites usam o mesmo servidor de database
  • Preciso de instruções claras
  • A solução PHP ou ASP.NET é aceitável se for genérica / portátil

Do site de chamada, você pode criar um guid ou algum outro valor gerado aleatoriamente. Armazene-o no registro de usuários (definido para expirar em um período de tempo especificado) no database, criptografe-o e passe-o para SSL para o site de pagamento onde ele é descriptografado e comparado ao database. Se eles combinarem, então o usuário iniciou session, se não corresponder, então eles são solicitados a fazer login.

Outra maneira, embora eu não tenha certeza se pode fazer com nomes de domínio diferentes está usando sessões. Como eles estão todos na mesma máquina, pode ser possível, mas não tenho 100% de certeza sobre isso.

O que você pediu é chamado de logon único (SSO) e pode ser implementado de algumas maneiras. Existem muitos tópicos sobre este assunto, exemplo: qual a sua abordagem favorita de compartilhamento de cookies de domínio cruzado? mas todos eles variam devido a requisitos individuais.

No seu caso, você tem domínios diferentes (para que você não possa compartilhar cookies entre eles), você mistura http e https (o que pode ser um problema) e você tem muitas aplicações para que você não faça muitas mudanças.

Então eu recomendaria considerar a sugestão de Robert:

  1. Quando o usuário é autenticado pela primeira vez (site A), você salva um GUID no database. Adicione uma nova tabela para sessões com colunas para GUID, userid, ip e timestamp ou salve-a como parte dos dados das ordens. Guarde o GUID no object da session.
  2. Na página que tinha um link para o site de pagamento, defina-o na seqüência de consulta ou como uma variável oculta (se for um formulário).
  3. No outro domínio (site B), verifique o GUID e, em seguida, procure-o no database. Se não fosse muito antigo, autenticar o usuário, caso contrário, redirecioná-lo para uma página de login.

Se você não pode alterar um link para o site de pagamento, então poderá tentar ignorar o passo 2 e validar o usuário pelo seu ip, mas isso pode ser muito arriscado.

A autenticação baseada em porta de passe é um serviço de autenticação centralizado fornecido pela Microsoft que oferece um único logon e serviços de perfil de núcleo para sites de membros. Para obter mais informações, consulte o seguinte site da Microsoft:

Fornecedor de autenticação de passaporte

Se você não pode implementar um Single Sign-On em seu nível de infra-estrutura, você deve usar a Federação de Identidade que permite que aplicativos de diferentes partes confiáveis ​​compartilhem autenticação através de reivindicações.

Isso pode ser feito usando o Language Assettion Markup Language (SAML) diretamente ou com produtos / padrões como:

  • SimpleSAMLphp
  • Serviços de Federação do Active Directory

Além disso, você pode dar uma olhada em OAuth ou OpenID que são mais esquemas de autenticação compartilhada do que SSO ou federação de identidade.

Intereting Posts