Pergunta

Tenho meu site 'A'. Terei um contrato comercial com o site 'B' para permitir que os usuários do site 'B' (haverá muitos desses sites) redirecionem seus usuários para o meu site quando os usuários realizarem uma das várias ações relacionadas a 'A' em 'B' . Posso determinar a passagem de qualquer informação de 'B' para 'A' diretamente ou através do navegador do usuário de 'B', mas eu (ou seja, site A) PRECISO validar que realmente vieram de 'B' e registrá-las automaticamente no site 'A'.

Eu SEI que o OAuth faz isso bem - mas SOMENTE no nível do "usuário". O que está acontecendo aqui é um contrato de negócios entre o site A e o site B - e não há necessidade de incomodar cada usuário de 'B' para fazer todo o salto do OAuth ...

Observe também que os usuários do site 'B' receberão um FORMULÁRIO no qual deverão clicar para que essas ações sejam transmitidas ao meu site 'A'. Quaisquer dados secretos / de autenticação (se houver) estão sendo comunicados ao usuário 'B' podem ser vistos (e adulterados) por eles. Meu site 'A' deve proteger contra isso.

Chegou perto: Transferência segura de usuários entre sites .

Opções listadas lá:

  1. Escreva uma chamada de serviço da web sobre HTTPS, em ambas as extremidades, para recuperar os detalhes do usuário, e isso só funciona para um par de login específico.
  2. Dê uma olhada em "Autenticação de passagem", é um conceito que permite que a identidade de um usuário seja passada de um sistema para outro.
  3. A melhor coisa em que posso pensar agora é passar um HASH do ID do usuário ou, se isso o deixa preocupado, o hash de alguns outros dados do usuário.
  4. O Site B pode ter um serviço da web que permite ao Site A criar uma sessão para o usuário.

Mas estou me perguntando se as pessoas têm opiniões diferentes desde que o Q foi perguntado há um ano e meio.

Minhas perguntas:

  1. Como devo implementar isso?
  2. Alguma implementação de php pronta que permite isso?

[Eu já implementei algo como isso, que acabou sendo um mecanismo falho, então estou curioso para saber qual seria o mecanismo correto.]

Foi útil?

Solução

Qual é o nível de segurança desses sites (por exemplo, bancos x blogs)? Para casos realmente simples, o site B pode armazenar em cache os dados do FORM CHECKSUM. E quando o usuário é redirecionado para A, A pode consultar B diretamente para a soma de verificação e validar os dados. A autenticação baseada em IP ou chave entre os sites pode ser configurada para aumentar a segurança.

Se você precisar de mais segurança, talvez o OAuth ainda seja a melhor opção. Lembre-se de que os usuários já estão logados em B, de modo que não precisarão inserir nada. E o formulário que eles enviam pode realmente configurar o OAuth ao mesmo tempo, de modo que quando o usuário for redirecionado para A, A realmente obtenha o token e, em seguida, possa recuperar os dados de B pelo OAuth (validando assim os dados provenientes de B).

Além do já mencionado Shibboleth , existe um padrão compatível SAML 2.0 que pode interessar a você e uma implementação de PHP muito boa de ambos os protocolos SimpleSAMLphp que vem como um serviço da web pronto, bem como bibliotecas para serem usadas para aplicativos personalizados. A curva de aprendizado de configurar tal federação SSO não foi muito íngreme e o SimpleSAMLphp é muito bem documentado.

Mas como tal SSO requer SAML / Shibboleth por todos os B-s e configuração e manutenção dos metadados de federação entre as partes, OAuth ainda pode ser a melhor escolha para você.

Outras dicas

Você pode usar um sistema de logon único como Shibboleth .

O Sistema Shibboleth é um pacote de software de código aberto baseado em padrões para logon único na web dentro ou fora dos limites organizacionais.Ele permite que os sites tomem decisões de autorização informadas para acesso individual de recursos on-line protegidos de maneira a preservar a privacidade.

Se isso for um exagero para você, simplesmente conceda a ambos os sites acesso aos dados do usuário um do outro por meio de uma API HTTPS por meio de um hash aleatório exclusivo para cada usuário, que é simplesmente passado ao clicar no "botão".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top