Pergunta

Eu estou usando de Janrain PHP-OpenID 2.1.3 , e eu conseguiu fazê-lo funcionar com todos os provedores que eu tentei, exceto para o Google e Yahoo. A principal diferença aqui parece ser que o Google e Yahoo, diferentemente da maioria dos outros provedores, não use uma URL específica do utilizador, mas sim ter o quadro descoberta utilizador tudo em sua extremidade - que joga o quadro Janrain padrão para um loop, em seguida, tenta iniciar o pedido de autenticação.

Pelo que tenho visto, parece que é provavelmente a descoberta YADIS que está jogando o erro, que deve ser capaz de ser ignorada desde a descoberta está na final do Google ou Yahoo, mas eu não tenho certeza. Isso tudo é uma experiência de aprendizagem informal grande para mim, e eu não tive qualquer documentação constatação de sorte que pode me ajudar em um presente. Todas as dicas seria muito apreciada.

Editar: o problema específico que estou tendo é que a função quando o begin () é chamado para o Google ou Yahoo URL, recebo um retorno nulo. Esta função é encontrado em Auth / OpenID / Consumer.php para referência.

Foi útil?

Solução

Ok, eu finalmente consegui corrigir a biblioteca ... Expliquei tudo aqui (você pode também baixar a biblioteca php-openid após minhas alterações).

Eu precisava fazer o que Paul Tarjan sugerido, mas, também, eu precisava modificar o Auth_OpenID_detectMathLibrary e adicionar a palavra-chave static para uma série de funções. Depois disso Parece que funciona perfeitamente, embora não seja uma solução ideal ... Eu acho que alguém deveria reescrever toda a biblioteca em PHP 5 ...

Outras dicas

Eu tive o mesmo problema no Windows XP. Corrigido pela ativação de extensão curl. Para fazer isso uncomment no php.ini a linha

extension=php_curl.dll

removendo o ; na frente dele, se houver. Reinicie o apache.

Também no Windows para funcionar corretamente, você precisa definir Auth_OpenID_RAND_SOURCE como nula uma vez que em janelas você não tem uma fonte aleatória. Você pode fazer isso adicionando a linha

define('Auth_OpenID_RAND_SOURCE', null);

em CryptUtil.php antes da primeira linha de código

if(!defined('Auth_OpenID_RAND_SOURCE')){

Mesmo que a onda não está habilitado a API devem trabalhar usando em vez do Auth_Yadis_PlainHTTPFetcher para communicat via HTTP. No caso do Google e Yahoo que você precisa https, por isso só funciona se open_ssl está habilitado (Auth_Yadis_PlainHTTPFetcher :: supportsSSL deve retornar true).

Eu tinha exatamente o mesmo problema e ele me levou cerca de 2 horas para controlar o problema. Jan Chuva OpenId lib requer 'DOM ou XML PHP domxml' (https://github.com/openid/php-openid), mas ele vai falhar silenciosamente quando nem está disponível!

No meu simples instalação CentOS:

yum install php-xml

corrigido o problema (estou usando este repo: http://blog.famillecollet.com / pages / config-en ).

Esta biblioteca deve trabalhar com o Yahoo eo Google apenas multa. Você pode ver o on-line de demonstração para esta biblioteca e experimentá-lo sozinho usando "yahoo.com" ou " https://www.google.com/accounts/o8/id " para testá-lo contra esses dois PO.

O Google tem ao longo identificador para digitar porque ainda está em beta e não têm empurrado sua Identificador OP para ser apenas "google.com" ainda.

Você está usando o exemplo RP? Posso sugerir-lhe submeter um erro detalhado em http://trac.openidenabled.com / trac / newticket? projeto = php-openid ou um inquérito detalhado através da lista de discussão.

O apoio immediate_mode aliás, faz trabalhar as bibliotecas se implementada corretamente. I (e outros) também seria feliz para ajudá-lo na irc.reenode.net canal OpenID IRC em #openid. Meu apelido é flácida.

Eu concordo em parte certificado - para mim instalar o pacote ca-certificates (no Debian como sistemas: apt-get install ca-certificates) e um reinício webserver resolvido a questão google / yahoo. Não é a ideia, mas em vez disso sugeriu em stackoverflow : -)

É porque você não tem o apoio onda ativado habilitado no PHP. Sem isso, ele não pode ficar https conteúdo. Pelo menos, é o que eu descobri. Quando eu tentei obter Yahoo ou o Google, ele falhou com uma mensagem de erro. "Erro de autenticação, não um OpenID válido", mas quando eu permitir php_curl, ele funciona corretamente

Verifique se o seu servidor tem cacho com o protocolo https ativado. Este resolvido para mim.

fio .

Aqui está um script rápido para testá-lo. Faça o upload no seu servidor e acccess-lo através de seu navegador.

<?php
error_reporting(E_ALL);
// create curl resource
$myurl = 'https://<YOURACCOUNT>.myopenid.com';
$curl_handle=curl_init();
curl_setopt($curl_handle,CURLOPT_URL, $myurl);
curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2);
curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1);
$buffer = curl_exec($curl_handle);


if (empty($buffer))
{
    print "Sorry, cannot access $myurl .<p>". curl_error($curl_handle);
}
else
{
    print $buffer;
}

curl_close($curl_handle);


?>

Se ele retorna "protocolo HTTPS não é suportado ou deficientes em libcurl" então você sabe o que fazer.

Eu tentei usar minha conta do Gmail e ele funciona, mas leva a um rediret permanente 301, o que faz sentido.

Eu baixei as últimas bibliotecas e eu obter os mesmos resultados que falharam ao usar o Yahoo !. Eu não experimentar o Google.

Se eu tentar usar http://www.yahoo.com eu recebo um erro dizendo autorização falhou , mas ele retorna a minha url me.yahoo.com correta. Se eu tento fazer o login usando o meu me.yahoo.com url então eu recebo um erro dizendo para inserir uma url OpenID válido.

Outra diferença potencial é que o Google e Yahoo usam HTTPS e se sua instalação PHP ou SSL está mal configurado (talvez faltando certs CA), em seguida, seu código OpenID vai deixar de estabelecer uma associação ou completar a chamada check_authentication.

Mas, sem mensagens de erro ou logs, eu realmente não posso dizer o tipo de falha que você está olhando.

Um par de anos mais tarde, mas isso pode ser relevante para os usuários que utilizam Janrains PHP OpenID biblioteca 2.2.2 em uma plataforma Windows. Eu ainda estou no PHP 5.2.17.

O meu teste simples, apenas para se certificar a biblioteca foi entrar em contato com o Google era usar os exemplos / discover.php programa, e passar Googles OpenID URL ( https://www.google.com/accounts/o8/id ).

De acordo com as instruções, as etapas padrão são permitir GMP (extensão descomente = php_gmp.dll) e ONDA (extensão descomente = php_curl.dll). XML já deve estar habilitado.

Você também pode precisar para extrair o pacote em contrib / Google e certifique-se google_discovery.php e ca-bundle.crt estão em Auth / OpenID.

O paranóico extra poderia começar com exemplos / detect.php, para se certificar de que eles têm coisas configurado corretamente. Espera-se que você passar todos os testes, exceto o teste de criptografia aleatoriedade. Para isso, você vai precisar adicionar

define('Auth_OpenID_RAND_SOURCE', null);

para o topo da examples / detect.php. E quando você estiver lá, acrescentar que a exemplos / consumidor / common.php (desde exemplos / discover.php usa-lo).

Agora, mesmo depois de tudo isso, a descoberta para o OpenID URL Google estava falhando. Eu estava ficando CURL error (60): SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed no log de erro php.

No ambiente Windows, você precisa de uma definição para o CURLOPT_CAINFO. Para o meu teste rápido, eu adicionei curl_setopt($c, CURLOPT_CAINFO, dirname(__FILE__)."/../OpenID/ca-bundle.crt"); antes do curl_exec () Declarações Auth / Yadis / ParanoidHTTPFetcher.php.

Isto permitiu que os exemplos / discover.php para descobrir os serviços oferecidos pelo Google URL.

Como uma solução de longo prazo para a criação CURLOPT_CAINFO no Windows, você pode querer referir-se a esta resposta StackOverflow para que você possa adicionar uma definição para o seu php.ini.

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