Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Saudações!
Estou para começar um novo projeto, e preciso criar um sistema de login centralizado, parecido com os serviços do google.
Por exemplo, tenho um único "usuário e senha", que devem servir para autenticar diversas aplicações distintas.
Alguém pode me dar alguma sugestão, de como centralizar essa autenticação?
Agradeço a atenção!
Flávio,
Ao meu ver, isso é mais uma questão de modelagem.
O que você precisa é autenticar, certo? Se for, caso o login seja verdadeiro você exibe um "menu" com as opções de sistemas e em cada sistema você verifica se o usuário está autenticado via sessão, por exemplo.
Se for acessado por um dos sistemas e não tiver autenticado, você redireciona para a página de login.
Abraços.
Basta você utilizar em todas as aplicações a mesma session ou cookie... :D
Basta você utilizar em todas as aplicações a mesma session ou cookie... :D
Que foi exatamente o que eu falei...
Seus sistemas estarão no mesmo servidor? Mesmo dominio?
Caso não de pra utilizar sessão, utilize o db como sessão, é uma forma simples.
Pessoal desde já obrigado pelas respostas,
mas os sistemas que preciso autenticar estarão em servidores distintos!
Na verdade o que preciso realmente e criar uma central de autenticação, onde os usuários de todos
os sistemas ficaram armazenados, e consultaram esta central na hora de logar na aplicação e informar quais permissões o usuário terá.
Como sua aplicação vai ficar em servidores distintos você pode fazer como eu falei mas não aconselho a usar mesma session senão seu sistema vai perder performance se toda vez que o usuário acessar uma página em um servidor você tiver que verificar autentição em outro
Então, CerebroVasconcelos, se eu fizer da forma como está sugerindo,
terei por exemplo que digitar usuario e senha em cada uma das aplicações, já que mesmo consultando um único local, terei de criar sessions em locais diferentes!
Se você criar um session handler personalizado, você define o que vai acontecer em cada um dos estados da sessão (abertura, encerramento, gravação, exclusão e limpeza) e, com isso, pode armazenar as informações de autenticação num banco de dados remoto ou, melhor ainda, consumir um serviço REsT (que por sua vez faria uso de um banco de dados) e permitir múltiplas autenticações crossdomain sem maiores problemas.
Se fizer como eu sugeri no meu primeiro comentário o seu cliente (internauta) só precisa fazer login em um único domínio e pode acessar qualquer um dos demais sites/sistemas que será identificado, mas como eu disse antes, levando em consideração que os sistemas vão ficar hospedados em servidores diferentes não aconselho que faça isto salvando a Session em um único servidor devido a perda de performance, no entanto você pode criar uma parada tipo webService que no servidor principal (no qual vai fazer a autenticação) se comunicando com os demais servidores e criar sessões, cookies... para o usuário no momento em que ele se loga, isso com certeza funciona mais vai dar um trabalho danado, pode dar uma olhada no link do brother acima o Bruno Augusto session handler personalizado eu não tinha visto falar mas tem cara de que pode te ajudar
Essa coisa de crossdomain no comentário do Bruno Augusto parece que foi feita pensando em problemas parecidos com o seu, o que eu falei acima funciona (segundo eu rs...) mas você vai ter que fazer do zero, por isso aconselho dar uma olhada nisto e qualquer coisa você pode mesclar tudo se o que tem lá num for como você quer
Você pode compartilhar dados entre sites de domínios diferentes de uma forma versátil através da técnica JSONP (Ajax Crossdomain em Javascript), quando você inclui um javascript de outro síte em seu próprio esse script é requisitado usando os cookies do outro síte e portando com a sessão do outro síte. Dessa forma, o outro síte pode lhe enviar informações a respeito dessa sessão do usuário. Vou dar um exemplo:
Você tem eu seu sitecliente.com.br um arquivo com um código parecido com este:
<script src="htttp://siteprincipal.com.br/login/login_externo.php?cliente=sitecliente&callback=loginCallback"></script>
Ao reconhecer essa requisição o site principal pode responder um script como esse:
loginCallback({"id_do_usuario":42, "nome":"Jeferson"});
Pronto, ao executar esse script fornecido pelo site principal seu site cliente obtêm informações da sessão. Claro que esse exemplo não é seguro, mas isso pode ser resolvido com algum sistema de autorização parecido com o OAuth.
parece legal Jeferson Daniel
Pessoal, agradeço a todos pela ajuda, vou estudar as sugestões para ver qual a melhor forma de implementar a minha necessidade!
desde já muito obrigado!
O jeito mais facil e seguro e via sao por session tipo um webservice.
Login fica concentrado no dominio principal.
Quando um site nao estiver logado, redireciona ao site principal q verifica o login e redireciona de volta com um token q pode ser usado para obter dados do cliente via curl, garantindo segurança na transação dos dados
Cara eu nunca fiz isso, mas se eu fosse hoje fazer um seria tipo assim:
eu mandava via url o parâmetro para o sistema central redirecionar (acho que o google faz assim) por exemplo você tem o siteA, siteB, siteC... e decidiu fazer todos os logins no siteB.com então seu formulário de login ficaria assim
sendo que site_atual.com vai ser site siteA.com no siteA, siteB.com no siteB, siteC.com no siteC, e assim por diante. É claro que você pode fazer umas coisas mais interessantes como um site default que no caso do google é google.com mas poderia ser youtube.com ou qualquer outro (site da google) sem problemas