2010-04-05 12 views
9

Şu anda bir OpenID uygulamasını test ediyorum ve Google'ın, aynı kullanıcı için bile farklı tüketici konak/alan adı için farklı bir tanımlayıcı gönderdiğini farkettim. Örneğin, istekte bulunan site localhost olduğunda Google, istekte bulunan site aynı kullanıcı için 127.0.0.1 olduğunda gönderdikleri tanımlayıcıya göre farklı bir tanımlayıcı gönderir.Google'ın OpenID tanımlayıcısı, "tüketici" alan adına bağlı olarak farklıdır. Alan adının değişmesi gerekiyorsa sorunlardan nasıl kaçınılır?

Not: Bunu genel alan adlarını kullanarak gerçekten denemedim, ancak davranışın neden farklı olacağını göremiyorum.

Google'ın davranışlarıyla ilgili kaygım, gelecekte web sitemizin alan adını değiştirmeyi tercih edersek, kullanıcıların kimlik sağlayıcısı olarak Google'ın OpenId'sini kullanarak web sitesine giriş yapamayacaklarıdır. Bu büyük bir sorun gibi görünüyor. Bir şeyi mi özlüyorum, ya da bu potansiyel problemle karşı karşıya olan OpenID tüketim sitelerinin hepsi mi?

Ayrıca bunu MyOpenId ile de test ettim, ancak MyOpenId'in oluşturduğu tanımlayıcı sabittir, dolayısıyla bu onlar için sorun olmaz.

+2

http://blog.stackoverflow.com/2009/04/googles-openids-are-unique-per-domain/ –

+0

bu sorun çözüldü. – Jus12

cevap

3

Google tarafından döndürülen OpenID'yi URL'ler kullanılır openid.realm değerine bağlı olduğu görülmektedir. Ayrıca, OpenID işlemini http://MYREALM ve openid.return_tohttp://localhost/openid.php olarak ayarlanmış bir alanla denedim, ancak bir HTTP 400 Hatalı İstek aldı. Görünüşe göre, Google, alanın "dönüş" URL'si ile aynı alana (ve muhtemelen bağlantı noktasına) sahip olduğunu kontrol ediyor.

Bir iş için bir fikir, OpenID ile ilişkili Gmail adresini saklamaktır. Bir Google OpenID isteğinde bulunduğunuzda, her zaman kullanıcının e-posta adresini, http://axschema.org/contact/email türünde Attribute Exchange üzerinden isteyin. Etki alanlarını değiştirirseniz, yeni OpenID URL'sini e-posta adresine dayanarak hesaplarıyla ilişkilendirebilirsiniz.

Not: Bu, HMAC-SHA1 imzasını doğruladığınız zorunlu'dur. Aksi takdirde, herkes, web uygulamanızın OpenID checkauth eylemini, yapılandırılmış bir e-posta adresiyle "hedefe" dönüştürebilir ve bu da kullanıcının hedefinin Gmail adresini bilmesi durumunda birisinin hesabını ele geçirmesine olanak tanır. Bir kullanıcı anahtarından sonra ilk kez kendi Google Hesabı ile giriş edildiğinde

, göç prosedürü

olduğunu :

 
+---------------------+----------------------------------+ 
| openid.ns   | http://specs.openid.net/auth/2.0 | 
| openid.mode   | associate      | 
| openid.assoc_type | HMAC-SHA1      | 
| openid.session_type | no-encryption     | 
+---------------------+----------------------------------+ 
:

  1. aşağıdaki parametrelerle https://www.google.com/accounts/o8/ud POST isteği gönder

    (uygun openid.realm=http://NEWREALM değiştirin) tepki olacaktır gibi bir şey:

    Servis URI, https://www.google.com/accounts/o8/ud için yönlendirme ile
     
    ns:http://specs.openid.net/auth/2.0 
    session_type:no-encryption 
    assoc_type:HMAC-SHA1 
    assoc_handle:B5hJNa39Cl39BXSOKMqkPpk03rJmE0GI6EhHBkvfLOBFAMMQX67HjuFq 
    expires_in:46800 
    mac_key:F5XUXvoYutLvFv4IzJS0diytLmbe 
    
  2. , mod 'checkid_setup', Özellik Exchange üzerinden kullanıcının e-posta adresi gerektirir, daha önce de elde edildi assoc_handle göndermek için emin olun.Başka bir deyişle, aşağıdaki, ek parametreleri göndermek emin olun:

     
    +----------------------+----------------------------------------------------------+ 
    | openid.assoc_handle | B5hJNa39Cl39BXSOKMqkPpk03rJmE0GI6EhHBkvfLOBFAMMQX67HjuFq | 
    | openid.ns.ax   | http://openid.net/srv/ax/1.0        | 
    | openid.ax.mode  | fetch_request           | 
    | openid.ax.type.email | http://axschema.org/contact/email      | 
    | openid.ax.required | email             | 
    +----------------------+----------------------------------------------------------+ 
    

    istek "dönüş" önemli parametreler openid_signed, openid_sig ve openid_ext1_value_email içerecektir.

  3. the OpenID Authentication 2.0 Specification's procedure for generating the signature. HMAC-SHA1 imzasının base64 kodlaması openid_sig değeriyle aynı değilse, imza geçersizdir. Bu örnekteki MAC anahtarının F5XUXvoYutLvFv4IzJS0diytLmbe olduğunu unutmayın. Google'ın sunucusunu dernek isteğiyle geri gönderilen her şeyi kullanın. http://axschema.org/contact/email "[d] Kullanıcının gmail adresi equests" bu

 

Google's Federated Login documentation page states. Muhtemelen, bir Google Hesabı oluşturulduktan sonra "Gmail" e-posta adresi düzeltildi. Ancak, bu varsayım geçerli değilse, bu prosedürü kullanmak güvenli değildir çünkü kötü niyetli bir kullanıcı, e-posta adresinin çalmak istediği hesaba ne olursa olsun, Federasyon Giriş Hizmeti tarafından iade edilen e-posta adresini değiştirebilir.

Sadece güvenli tarafta olmak için, yeni OpenID'yi etkinleştirmeden önce, e-posta adresine bir e-posta doğrulama isteği gönderin. Doğrulama bağlantısı, yeni OpenID ile ilişkili olmayan bir içermeyi içerecektir. Bağlantı tıklandığında, yeni OpenID, kullanıcının e-posta adresi ile yeni OpenID URL'si arasındaki ilişkiyi doğrulayamadığı için kullanıcının hesabıyla tamamen ilişkilendirilir.

Ayrıca bakınız: openid.sig -- How is it generated?

+0

kırık, ama HMAC-SHA1 kontrol ederek, emin değilim, çünkü openNet için DonNetOpen Auth lib kullanıyorum çünkü muhtemelen lib bu – Omu

+0

@ ChuckNorris: gibi görünüyor Dernekler işlemek için 'DotNetOpenAuth.OpenId' ad alanında sınıflar vardır, ancak OpenID kimlik doğrulama işleminde hangi aşamada kullanıldığından emin değilim. OpenID 2.0 "geri dönüş" istekleri, bilginin Hizmet'ten geldiğini doğrulamak için web uygulaması tarafından kullanılabilecek bir assoc_handle içerir. Web uygulaması, 'check_authentication' modu ve 'openid.signed' parametre değerinde referans verilen tüm parametrelerle Hizmet URI'sına bir POST isteği yapar. Bakınız [11.4.2. OpenID Sağlayıcısı ile Doğrudan Doğrulama] (http://tinyurl.com/3ffesj9). –

+0

@ChuckNorris: İade edilen kimlik "https://www.google.com/accounts/" ile başlıyorsa Hizmet URI'sının "https: // www.google.com/accounts/o8/ud" olduğundan emin olun. o8/'. Başka bir deyişle, herhangi bir OpenID Sağlayıcının bir Google OpenID'yi geri göndermesine izin vermeyin. Google’ın olduğundan emin olun. –

1

başka bir olası iş çevresinde bulunmaktadır. Dolaylı kimlik doğrulama isteği yapılırken (Hizmet URI'sine yönlendirilirken), realm yeni bölgeye ayarlanmış olsa bile eski OpenID URL'sini openid.claimed_id ve openid.identity parametrelerinin değerleri olarak gönderin.

Geliştirici makinemde, 127.0.0.1 değerine sahip olan 'bu bilgisayar' alanına sahibim. Ben Google'ın OpenID Sağlayıcısından, bölge 'http: // ThisComputer' kimlik isteyince:

https://www.google.com/accounts/o8/id?id=VGwSBXN7Q00X4G9CTAsLPMJ3m6JaPljpkrURAUZJ

Sonra OP, aleme 'dan kimlik talep http http://specs.openid.net/auth/2.0/identifier_select ve openid.identity ve openid.claimed_id hem seti, geri gibi bir şey var : // localhost 've openid.identity ve openid.claimed_id her ikisi de http://specs.openid.net/auth/2.0/identifier_select olarak ayarlanmıştır.

https://www.google.com/accounts/o8/id?id=VGwSBXNwzPQk-puNdfZl4tP-s7JNHPA3WmMHozHJ

Sonra OP kimlik istedi bölge 'http: // localhost' Geri gibi bir şey var https://www.google.com/accounts/o8/id?id=VGwSBXN7Q00X4G9CTAsLPMJ3m6JaPljpkrURAUZJ ve openid.identity ve openid.claimed_id hem seti (Google hesabım için OpenID kimlik bölge http' olduğunda ://bu bilgisayar'). Döndüğümden:

olduğunu
https://www.google.com/accounts/o8/id?id=VGwSBXN7Q00X4G9CTAsLPMJ3m6JaPljpkrURAUZJ

, ben alem ': // ThisComputer http' olduğunda aynı OpenID kimlik URL'yi döndüm. Bu nedenle, OpenID'e dayanan web uygulamamı 'bu bilgisayardan' 'localhost'a' 'göç etmiş olmama rağmen, eski OpenID kimlik URL'sini kullanmaya devam edebilirim.

Bu çözüm, kullanıcının eski OpenID kimlik URL'sini bildiğiniz sürece, belki de bir çerezde depolandığından, çalışır.

Bir Not: Ben (diğer https://www.google.com/accounts/o8/id?id=VGwSBXN7Q00X4G9CTAsLPMJ3m6JaPljpkrURAUZJ veya bir https://www.google.com/accounts/o8/id?id=VGwSBXN7Q00X4G9CTAsLPMJ3m6JaPljpkrURAUZJ ve diğeri https://www.google.com/accounts/o8/id?id=VGwSBXNwzPQk-puNdfZl4tP-s7JNHPA3WmMHozHJ iken örneğin bir http://specs.openid.net/auth/2.0/identifier_select olan) farklı değerlere openid.identity ve openid.claimed_id ayar denedik ancak Google'ın OP hizmeti İstediğiniz sayfa geçersiz" ile yanıt verdi ."

İlgili konular