Nasıl Zend OpenID ile Doğrudan Kimlik tabanlı OpenID kimlik doğrulaması uygulamak yok

7 Cevap php

Ben bir sadece bir url yönlendirilir sayede onlar doğrudan kimlik tabanlı giriş sistemi kullanmak gibi Google ve Yahoo gibi siteleri kullanarak giriş yapamıyorum bulmak ancak - Ben Zend çerçeve ve gelen http://code.google.com/p/openid-selector/ OpenID seçici kullanarak ediyorum Kimlik doğrulama için kendi benzersiz bir url girmeden aksine.

Ben birçok seçenek ve kesmek teslim ettik ama bunların hiçbiri çalışmıyor gibi görünüyor. Nasıl bu btw burada çalışmak alabilirsiniz - nasıl yığın taşması de uygulanıyor? Gerçekten burada adamları tüm yardım kullanabilirsiniz ..


Düzenle

Peki burada sorun ne fark var Zend OpenID sınıf OpenID 2.0 şeyi desteklemiyor yani tipik bir açık kimliği providor size örneğin-name.openid-providor.com veya OpenID gibi benzersiz bir url vermesidir olmasıdır -providor.com/your-name ve Zend OpenID sınıfı sadece bu url ile ayrıştırır ve sonra kimlik üzerine geri yönlendirilir providor web sitesine yönlendirir.

Yahoo ve google durumunda - benzersiz bir url girmeyin yerine providors giriş siteyi yönlendirilir ve giriş ve kimlik üzerine geri yönlendirilir - yani temelde happeining whats olduğunu zend_openID nesne kime anlatmak ayrıştırması providor bu genel url kendisinden anlatmak için başarısız olur. Teh Google linke tıkladığınızda gibi https://www.google.com/accounts/o8/id sizi yönlendirir

Onun daha bir buraya zend OpenID nesne ile sorun ve zend ilgili forumlarda herhangi bir yardım yok - Birisi zaten kesmek ya da bunu gerçekleştirmek için sınıfa yapabilir bir değişiklik olsaydı ben merak ediyordum. Maalesef ben bir şey eksik ama ben bu ve açık kimliği ile programlamaya biraz yeniyim ve sadece ayaklarım ıslak almaya başladı varsa.


Için teşekkürler takip - Ben bir süre geri RPX içine kontrol etmedi ve onlar php sınıf var ama ben bunu kontrol etmek mümkün değildi artı ben gerçekten sadece şimdi için üzerinde stackoverflow olarak kullanılan kod Seçici Yahoo ile çalışmak için almak istiyorum ve Google kimlik doğrulaması. Bir keşif yapmak için düzenli ifade çek bir dizi çalışır gibi Zend OpenID sınıfın kullandığı ayrıştırma çimdik şekilde bir tür olmalı.

7 Cevap

Küçük oyuna geç ama ben interwebs çevresinde bulunan bazı kesmek ile bu çalışma almak başardı.

İlk. Yahoo. Yahoo yapmam gereken tüm çalışma almak yerine sadece yahoo.com ve me.yahoo.com kullanmak için JavaScript değiştirmek oldu ve ben kullanıyorum Zend Framework sürümü ile mükemmel çalıştı. Ne yazık ki Google hala değildi, bu yüzden bazı hack sırayla oldu.

Tüm bu değişiklikler Zend / OpenId / Consumer.php gitmek

İlk olarak, _discovery yönteminde hattı 740 çevresinde başlar preg_match çeklerin dizi aşağıdakileri ekleyin.

} else if (preg_match('/<URI>([^<]+)<\/URI>/i', $response, $r)) {
  $version = 2.0;
  $server = $r[1];

Ben return false önce bu hakkı ekledi; else {} blok öyle deyim.

İkincisi, _checkId yöntem size ben bu üç olgunun her çağrılacak neden bilmek yeterli etrafında kazılan değil 3 yeni blok (eklemeniz gerekir, bu yüzden güvenli tarafta olmak üzere tüm kapalı.

$ Sürüm <= 2.0 blok içinde, bir if / else if / else blok bulabilirsiniz. Ilk ifadesi ($ this-> _SESSION == null) sonuna kadar bu eklerseniz:

if ($server == 'https://www.google.com/accounts/o8/ud') {
  $this->_session->identity = 'http://specs.openid.net/auth/2.0/identifier_select';
  $this->_session->claimed_id = 'http://specs.openid.net/auth/2.0/identifier_select';
}

Else if (blok sonuna bunu ekleyin) 'SID' (tanımlanmıştır:

if ($server == 'https://www.google.com/accounts/o8/ud') {
  $_SESSION['zend_openid']['identity'] = 'http://specs.openid.net/auth/2.0/identifier_select';
  $_SESSION['zend_openid']['claimed_id'] = 'http://specs.openid.net/auth/2.0/identifier_select';
}

Ve sonra başka bir bloktan sonra (yani if ​​/ else dışında hep birlikte / else blok ise, ancak yine de $ sürüm <= 2.0 blok içinde) ekleyin:

if ($server == 'https://www.google.com/accounts/o8/ud') {
  $params['openid.identity'] = 'http://specs.openid.net/auth/2.0/identifier_select';
  $params['openid.claimed_id'] = 'http://specs.openid.net/auth/2.0/identifier_select';
}

Link to the bug in Zend Framework Issue Tracker

Google'ın OpenID şeyler kullanmak gerekiyor ve ben Steven'ın kod çalıştı ve o kadar-bir işe alamadım. Ben bazı değişiklikler yaptık.

_discovery Değişim yöntemi hala aynı:

Zend / OpenID / Consumer.php, hat 765, ekleyin:

} else if (preg_match('/<URI>([^<]+)<\/URI>/i', $response, $r)) {
    $version = 2.0;
    $server = $r[1];

Gerisi olsa da, farklı:

Zend / OpenID / Consumer.php, (yukarıdaki değişikliği yaptıktan sonra) hattı 859, ekleyin:

if (stristr($server, 'https://www.google.com/') !== false) {
    $id = 'http://specs.openid.net/auth/2.0/identifier_select';
    $claimedId = 'http://specs.openid.net/auth/2.0/identifier_select';
}

Bu hemen önce geçerli:

$params['openid.identity'] = $id;

$params['openid.claimed_id'] = $claimedId;

Ve bu kimliğini geri almak için, bir kez yetkili:

Zend / Auth / Adaptör / openid.php, satır 278:

if(isset($_REQUEST['openid_identity']))
{
    $this->_id = $_REQUEST['openid_identity'];
    $id = $this->_id;
}

Bu hemen önce geçerli:

return new Zend_Auth_Result(
    Zend_Auth_Result::SUCCESS,
    $id,
    array("Authentication successful"));

Ben iyice Bu kodu test değil unutmayın. Aşağıdaki kod daha shakey.

Ben daha fazla zaman geçirdim ve ben yukarıdakilere ek olarak aşağıdaki değişiklikler ile Google Apps etki ile çalışmak için kazanılmış ettik:

Zend / OpenID / Consumer.php, hat 734

    	$discovery_url = $id;
    	if(strpos($discovery_url, '/', strpos($discovery_url, '//')+2) !== false) {
    		$discovery_url = substr($discovery_url, 0, strpos($discovery_url, '/', strpos($discovery_url, '//')+2));
    	}
    	$discovery_url .= '/.well-known/host-meta';
    	$response = $this->_httpRequest($discovery_url, 'GET', array(), $status);
        if ($status === 200 && is_string($response)) {
            if (preg_match('/Link: <([^><]+)>/i', $response, $r)) {
    			$id = $r[1];
    		}
        }

Bu hak peşinde:

/* TODO: OpenID 2.0 (7.3) XRI and Yadis discovery */

Bunu ben yapmak zorunda tek değişiklik oldu inanıyoruz. Ben güvenlik nedeniyle yukarıdaki ile ilgili bazı kontrol olması gerekiyordu eminim, ama onlar ne olacağını görmek için içine yeterince bakmadım.

Ben [yani zend üzüldüm] zend_openid sınıfını kullanarak hendek karar verdik ve bunun yerine JanRains OpenID kütüphanesi kullanarak geçiş yaptıktan - üzerinden verilen tüm tavsiyeler oluyor. Onun kadar almak için birkaç saat almış ve benim proje ile çalışıyor ama en az onun bir esinti gibi çalışıyor. Bu çalışma ama onun değerinde almak için üzerinde hack ve kod dökülme biraz bir sürü yapmak zorunda kaldı.

Kütüphane kendi kimlik doğrulaması yaptığı gibi ben de bu yeni kod kütüphanesi yerleşmek için Zend-Auth ile Zend adaptörleri herhangi kullanamadı. SO ben kesmek ve böylece benim kütüphanesini kullanarak kimlik doğrulaması ve sadece bir hızlı birebir Zend-Auth nesne biraz çekerek Auth nesne sonucu depolamak yerine var sadece Auth nesnesine ayarlanmış bir dolu zend_result döndürülen bir genel adaptör yaptı yine benim kodu yeniden yazmak için.

Kütüphane http://openidenabled.com/php-openid/ mevcuttur

Tüm yardım çocuklar için teşekkürler.

Ben de benzer sorunları ile uğraşıyorum. Ben Zend Framework ile RPX now kullanarak planlıyorum. Belki bir adaptör yazacağım. Sadece bilmeni.

Bilgi: 'Şimdi RPS' kullanıcı kaydı ile bir all-in-one arayüzü ve UI sağlar

  • facebook
  • Google
  • Yahoo
  • MySpaceID
  • , Windows LiveID
  • OpenID
  • aol

O Yahoo only works with OpenID 2.0 eminim. Yahoo kullanıcıları desteklemek istiyorsanız, 2.0 desteği ile bir kütüphaneye yükseltmek zorunda gidiyoruz. Yani, bazı ayrıştırma verdiği daha meselesi olacak.

Eğer manuel kontrol ettin - Zend_OpenId_Consumer basics? Bu sayfada 38.2.2 kontrol ve olması gerektiği, çünkü bu yardımcı olur bana bildirin.

Google OpenID sunuyor eğer Özellikle, bilmiyorum. Ben bir süre önce denedim çünkü Yahoo çalıştı biliyorum.

Bilgi için teşekkürler. Ben JanRain kütüphanesini kullanarak başladı, ama ben işe Basit Kayıt alma ile ilgili sorunlar var: Ben herhangi bir veri bu şekilde almak başarılı olamadık. Ve Özellik Exchange kullanarak ilgili hiçbir belge yoktur. (

Yani, ben buldum ve Zend / OpenID çalışıyordu, ama sizin gibi aynı sorun vardı: hayır Yahoo!, Google ve kim bilir başka ne destek. Bu okuma, ben JanRain geri almak gerekecek gibi görünüyor; Bir üçüncü şahıs servis olduğu gibi RPX benim durumumda bir seçenek değildir.