문제

나는 사용하고있다 Janrain의 PHP-OpenID 2.1.3, Google과 Yahoo를 제외하고 제가 시도한 모든 제공업체와 작동하도록 했습니다.여기서 가장 큰 차이점은 대부분의 다른 제공업체와 달리 Google과 Yahoo가 사용자별 URL을 사용하지 않고 사용자 검색 프레임워크를 모두 갖추고 있다는 것입니다. 그러면 루프에 대한 기본 Janrain 프레임워크가 발생합니다. 인증 요청을 시작하려고 합니다.

내가 본 바에 따르면 아마도 오류를 발생시키는 YADIS 발견인 것 같습니다. 발견은 Google 또는 Yahoo 측에서 수행되므로 우회할 수 있어야 하지만 확실하지 않습니다.이것은 나에게 있어 매우 큰 비공식 학습 경험이며, 이 경험에 도움이 될 수 있는 문서를 찾지 못했습니다.어떤 조언이라도 대단히 감사하겠습니다.

편집하다: 내가 겪고 있는 구체적인 문제는 Google 또는 Yahoo URL에 대해 Begin() 함수가 호출될 때 null 반환을 받는다는 것입니다.이 함수는 참조용으로 Auth/OpenID/Consumer.php에 있습니다.

도움이 되었습니까?

해결책

좋아, 마침내 도서관을 고쳐야했는데 ... 나는 모든 것을 설명했다 여기 (내 변경 후 PHP-Openid 라이브러리를 다운로드 할 수도 있습니다).

나는 Paul Tarjan이 제안한 것을해야했지만 또한 수정해야했습니다. Auth_OpenID_detectMathLibrary 그리고 추가하십시오 static 많은 기능에 대한 키워드. 그 후에는 이상적인 해결책이 아니지만 완벽하게 작동하는 것 같습니다 ... 누군가가 PHP 5에서 전체 라이브러리를 다시 작성해야한다고 생각합니다.

다른 팁

Windows XP에서도 같은 문제가있었습니다. 컬 확장을 활성화하여 고정. Php.ini 라인 에서이 무감각을 수행합니다

extension=php_curl.dll

제거하여 ; 그 앞에. Apache를 다시 시작하십시오.

또한 Windows에서 제대로 작동하려면 auth_openid_rand_source를 Windows에서는 무작위 소스가 없기 때문에 NULL로 정의해야합니다. 라인을 추가 하여이 작업을 수행 할 수 있습니다

define('Auth_OpenID_RAND_SOURCE', null);

첫 번째 코드 라인 전에 cryptutil.php에서

if(!defined('Auth_OpenID_RAND_SOURCE')){

컬이 활성화되지 않더라도 API는 auth_yadis_plainhttpfetcher를 사용하여 HTTP를 통해 Communicat를 사용하여 작동해야합니다. Google 및 Yahoo의 경우 https가 필요하므로 Open_SSL이 활성화 된 경우에만 작동합니다 (Auth_yadis_plainhttpfetcher :: supportssl은 true를 반환해야합니다).

나는 정확히 같은 문제가 있었고 문제를 추적하는 데 거의 2 시간이 걸렸습니다. Jan Rain의 OpenID Lib는 'dom 또는 domxml php xml'(https://github.com/openid/php-openid)를 필요로하지만 아무도 사용할 수 없을 때 조용히 실패하지 않습니다!

Centos 설치 간단한 :

yum install php-xml

문제를 해결했습니다 (이 repo를 사용하고 있습니다. http://blog.famillecollet.com/pages/config-en).

이 라이브러리는 Yahoo 및 Google에서 잘 작동합니다.당신은 볼 수 있습니다 온라인 데모 이 라이브러리에 대해 "yahoo.com" 또는 "https://www.google.com/accounts/o8/id"를 사용하여 이 두 OP에 대해 테스트해 보세요.

Google은 아직 베타 버전이고 아직 OP 식별자를 'google.com'으로 푸시하지 않았기 때문에 입력할 식별자를 가지고 있습니다.

예제 RP를 사용하고 있습니까? 자세한 버그를 제출하는 것이 좋습니다 http://trac.openidenabled.com/trac/newticket?project=php-openid 또는 메일 링리스트를 통한 자세한 문의.

즉시 _mode 지원은 실제로 올바르게 구현되면 라이브러리를 작동시킵니다. 나 (및 다른 사람들)은 #openid의 OpenID IRC 채널 IRC.reenode.net에서 당신을 도와 드리겠습니다. 내 별명은 연약합니다.

인증서 부분에 동의합니다. CA-Certificates 패키지를 설치하기 위해 (Debian Like Systems : APT-GET 설치 CA-CERTIFICATES) 및 WebServer Respart는 Google/Yahoo 문제를 해결했습니다. 내 생각이 아니라 대신 제안했습니다 stackoverflow에서 :-)

PHP에서 컬 지원을 활성화하지 않기 때문입니다. 이것 없이는 HTTPS 컨텐츠를 얻을 수 없습니다. 적어도 그게 내가 발견 한 것입니다. Yahoo 또는 Google을 얻으려고 할 때 "인증 오류, 유효한 OpenID가 아님"오류 메시지가 실패했지만 PHP_CURL을 활성화하면 올바르게 작동합니다.

서버에 HTTPS 프로토콜이 활성화 된 상태에서 컬이 있는지 확인하십시오. 이것은 나를 위해 그것을 해결했습니다.

이것 좀 봐 .

다음은 테스트하는 빠른 스크립트입니다. 서버에 업로드 한 다음 브라우저를 통해 액세스하십시오.

<?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);


?>

"libcurl에서 지원되지 않거나 비활성화되지 않은 프로토콜 HTTPS"를 반환하면 어떻게 해야하는지 알 수 있습니다.

Gmail 계정을 사용하여 시도했지만 작동하지만 301 영구 리디레트로 이어집니다.

최신 라이브러리를 다운로드했으며 Yahoo!를 사용할 때 동일한 실패한 결과를 얻습니다. 나는 구글을 시도하지 않았다.

내가 사용하려고한다면 http://www.yahoo.com 인증이 실패했다는 오류가 발생하지만 올바른 Me.yahoo.com URL을 반환합니다. me.yahoo.com URL을 사용하여 로그인하려면 유효한 OpenID URL을 입력하라는 오류가 발생합니다.

또 다른 잠재적 인 차이점은 Google과 Yahoo가 HTTPS를 사용하고 PHP 또는 SSL 설치가 잘못 구성되면 (아마도 CERT가 누락 된 경우) OpenID 코드는 연관성을 설정하거나 check_authentication 호출을 완료하지 못한다는 것입니다.

그러나 오류 메시지 나 로그가 없으면 어떤 유형의 실패를보고 있는지 알 수 없습니다.

2 년이 너무 늦었지만 사용하는 사용자와 관련이있을 수 있습니다. Janrains PHP OpenID 2.2.2 Windows 플랫폼의 라이브러리. 나는 아직도 PHP 5.2.17에 있습니다.

내 간단한 테스트, 도서관이 Google에 연락했는지 확인하기 위해 예제/discover.php 프로그램을 사용하고 Googles OpenID URL을 통과하는 것이 었습니다.https://www.google.com/accounts/o8/id).

지침에 따라 표준 단계는 GMP (무능력 확장 = php_gmp.dll) 및 curl (uncomment extension = php_curl.dll)을 활성화하는 것입니다. XML은 이미 활성화되어야합니다.

Contrib/Google에서 패키지를 추출하고 Google_Discovery.php 및 Ca-Bundle.crt가 Auth/OpenID에 있는지 확인해야 할 수도 있습니다.

여분의 편집증은 예제/감지로 시작하여 물건을 올바르게 설정할 수 있는지 확인할 수 있습니다. 암호화 무작위성 테스트를 제외한 모든 테스트를 통과 할 것으로 예상됩니다. 이를 위해 추가해야합니다

define('Auth_OpenID_RAND_SOURCE', null);

예/detect.php의 맨 위에 그리고 당신이 거기에있는 동안, 그것을 예/소비자/common.php에 추가하십시오 (예/discover.php가 그것을 사용하기 때문에).

이제 이후에도 Google OpenID URL에 대한 발견이 실패했습니다. 나는 얻고 있었다 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 PHP 오류 로그에서.

Windows 환경에는 Curlopt_cainfo에 대한 정의가 필요합니다. 빠른 테스트를 위해 추가했습니다 curl_setopt($c, CURLOPT_CAINFO, dirname(__FILE__)."/../OpenID/ca-bundle.crt"); auth/yadis/paranoidhttpfetcher.php의 curl_exec () 명령문 이전.

이를 통해 예제/Discover.php는 Google URL이 제공하는 서비스를 발견 할 수있었습니다.

Windows에서 Curlopt_Cainfo를 설정하기위한 장기 솔루션으로 이 stackoverflow 답변 따라서 php.ini에 설정을 추가 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top