Colegas, tenho um problema e gostaria de saber se alguém pode me ajudar.
Me foi solicitado implementar uma feature onde, em um determinado site, há um botão onde, após o usuário clicar neste botão, ele é autenticado automaticamente em um outro recurso, de outra URL. Para exemplificar, o usuário está no dominio
http://www.teste.com e, quando ele clica em um botão, ele efetua a autenticação no dominio
http://www.outroteste.com. Através do curl eu fiz o seguinte:
$cookie = $_SERVER['DOCUMENT_ROOT'] . "/../data/cookies.txt";
$params = array(
'senha' => '123456',
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Accept: */*", "Connection: Keep-Alive"));
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLINFO_HEADER_OUT, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_COOKIESESSION, 1);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($curl, CURLOPT_URL, $url);
$response = curl_exec($curl);
Se eu der um die($response) eu consigo ver a página ao qual, consegui fazer a autenticação corretamente. Todavia, quando eu clico em algum link, sou redirecionado novamente para a página de login, como se eu não houvera feito a autenticação.
Tentei trabalhar o cookie retornado, atrelando a minha sessão da seguinte maneira:
preg_match('/^Set-Cookie:\s*([^;]*)/mi', $response, $matches);
parse_str($matches[1], $cookies);
setcookie('BNES_PHPSESSID', $cookies['BNES_PHPSESSID']);
Porém, quando redireciona para o outro domínio, não funciona, conforme citei anteriormente onde, ele simplesmente, retorna a pagina principal de login.
Desta forma, primeiramente gostaria de saber se tal implementação é possível onde, em um determinado dominio ao qual estou, consigo autenticar em outro e manter esta autenticação do usuário sem que ele faça novamente ao ser redirecionado. Se for possível, gostaria da ajuda dos demais.
Desde já, agradeço