2010-04-05 6 views
9

मैं वर्तमान में एक ओपनआईडी कार्यान्वयन का परीक्षण कर रहा हूं, और मुझे लगता है कि Google एक ही उपयोगकर्ता के लिए भी विभिन्न उपभोक्ता होस्ट नाम/डोमेन नाम के लिए एक अलग पहचानकर्ता भेजता है। उदाहरण के लिए, अनुरोधकर्ता साइट 127.0.0.1 उसी उपयोगकर्ता के लिए अनुरोध करते समय पहचानकर्ता साइट की तुलना में localhost पर अनुरोध करने वाली साइट localhost है, तो Google एक अलग पहचानकर्ता भेजता है।Google का ओपनआईडी पहचानकर्ता "उपभोक्ता" डोमेन नाम के आधार पर अलग है। यदि डोमेन नाम बदलने की जरूरत है तो समस्याओं से कैसे बचें?

नोट: मैंने वास्तव में सार्वजनिक डोमेन नामों का उपयोग करके इसका परीक्षण नहीं किया है, लेकिन मैं नहीं देख सकता कि व्यवहार अलग क्यों होगा।

Google के व्यवहार के साथ मेरी चिंता यह है कि यदि हम कभी भी भविष्य में हमारी वेबसाइट डोमेन नाम बदलना चुनते हैं, तो उपयोगकर्ता पहचान प्रदाता के रूप में Google के OpenId का उपयोग करके वेबसाइट पर लॉग इन करने में सक्षम नहीं होंगे। यह एक बड़ी समस्या प्रतीत होता है। क्या मुझे कुछ याद आ रही है, या क्या इस ओपनआईडी उपभोग करने वाली साइटें इस संभावित समस्या का सामना कर रही हैं?

मैंने इसे MyOpenId के साथ भी परीक्षण किया है, लेकिन पहचानकर्ता जो MyOpenId बनाता है ठीक है, इसलिए यह उनके साथ कोई समस्या नहीं होगी।

+2

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

+0

क्या इस समस्या को हल किया गया है? – Jus12

उत्तर

5

Google OpenID most important technical issue पर एक नज़र डालें। वहाँ कुछ infos। मूल रूप से एक लिंक की stackoverflow.com लेखा अनुभाग से लिया;)

-SA

+8

लिंक ईमेल करने के बारे में –

3

ऐसा लगता है कि OpenID यूआरएल गूगल द्वारा दिया openid.realm मूल्य है कि प्रयोग किया जाता है पर निर्भर हैं। साथ ही, मैंने ओपनआईडी प्रक्रिया को http://MYREALM और openid.return_to पर 0mपर सेट सेट के साथ ओपनआईडी प्रक्रिया की कोशिश की, लेकिन HTTP 400 खराब अनुरोध प्राप्त हुआ। जाहिर है, Google जांचता है कि दायरे में एक ही डोमेन (और शायद बंदरगाह) "URL पर वापस" के रूप में है।

ओपनआईडी से जुड़े जीमेल पते को स्टोर करना एक काम-आसपास के लिए एक विचार है। जब भी आप Google ओपनआईडी का अनुरोध करते हैं, तो हमेशा एट्रिब्यूट एक्सचेंज के http://axschema.org/contact/email प्रकार के माध्यम से उपयोगकर्ता के ईमेल पते का अनुरोध करें। यदि आप कभी भी डोमेन बदलते हैं, तो आप नए ओपनआईडी यूआरएल को ईमेल पते के आधार पर अपने खाते से जोड़ सकते हैं।

नोट: यह अनिवार्य है कि आप HMAC-SHA1 हस्ताक्षर को सत्यापित करते हैं। अन्यथा, कोई भी आपके वेब एप्लिकेशन की ओपनआईडी चेकएथ एक्शन को एक निर्मित ईमेल पते के साथ "वापस" करने में सक्षम होगा, जिससे उन्हें किसी के खाते को लेने की इजाजत मिलती है यदि वे लक्ष्य के जीमेल पते को जानते हैं।

जब कोई उपयोगकर्ता स्विच करने के बाद पहली बार अपने गूगल खाते से लॉग इन कर रहा है, प्रवास प्रक्रिया है:

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

  1. निम्नलिखित मानकों के साथ https://www.google.com/accounts/o8/ud करने के लिए एक पोस्ट अनुरोध भेजें कुछ

    (openid.realm=http://NEWREALM की जगह के रूप में उपयुक्त)

    प्रतिक्रिया हो जाएगा की तरह:

    012,351,
     
    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. सेवा URI, https://www.google.com/accounts/o8/ud पर रीडायरेक्ट

    , मोड 'checkid_setup', assoc_handle के रूप में गुण एक्सचेंज के माध्यम से उपयोगकर्ता के ईमेल पते की आवश्यकता होती है कि पहले के साथ-साथ प्राप्त हुई थी भेजने के लिए सुनिश्चित करें।दूसरे शब्दों में, निम्न, अतिरिक्त पैरामीटर भेजना सुनिश्चित करें:

     
    +----------------------+----------------------------------------------------------+ 
    | 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             | 
    +----------------------+----------------------------------------------------------+ 
    

    अनुरोध करने के लिए "वापसी" महत्वपूर्ण पैरामीटर openid_signed, openid_sig, और openid_ext1_value_email शामिल होंगे।

  3. the OpenID Authentication 2.0 Specification's procedure for generating the signature का पालन करें। यदि एचएमएसी-एसएचए 1 हस्ताक्षर का बेस 64-एन्कोडिंग openid_sig मान जैसा नहीं है, तो हस्ताक्षर अमान्य है। ध्यान दें कि इस उदाहरण में मैक कुंजी F5XUXvoYutLvFv4IzJS0diytLmbe है। जो कुछ भी Google के सर्वर ने एसोसिएशन अनुरोध के साथ वापस भेजा है उसका प्रयोग करें।

 

Google's Federated Login documentation page states कि http://axschema.org/contact/email "[आर] उपयोगकर्ता का gmail पते equests"। संभवतः, एक बार Google खाता बनने के बाद "जीमेल" ईमेल पता तय किया जाता है। लेकिन, यदि यह धारणा मान्य नहीं है, तो इस प्रक्रिया का उपयोग करना सुरक्षित नहीं है क्योंकि एक दुर्भावनापूर्ण उपयोगकर्ता संघीय लॉगिन सेवा द्वारा लौटाए गए ईमेल पते को बदल सकता है, जो भी ईमेल पता उस खाते का है जो वह चोरी करना चाहता है।

नया ओपनआईडी सक्रिय करने से पहले सुरक्षित पक्ष पर रहने के लिए, ईमेल पते पर एक ईमेल सत्यापन अनुरोध भेजें। सत्यापन लिंक में नए ओपनआईडी से जुड़े एक गैरसे शामिल होंगे। एक बार लिंक क्लिक होने के बाद, नया ओपनआईडी उपयोगकर्ता के खाते से पूरी तरह से जुड़ा होगा क्योंकि गैर-प्राप्त होने पर ईमेल पता और नए ओपनआईडी यूआरएल के बीच संबंध सत्यापित होगा।

यह भी देखें: openid.sig -- How is it generated?

+0

टूटा हुआ है (मैं यह करता हूं), लेकिन एचएमएसी-एसएचए 1 की जांच के साथ, क्योंकि मैं ओपनिड के लिए डॉननेट ओपेन एथ लिब का उपयोग कर रहा हूं, इसलिए संभवतः lib – Omu

+0

@ChuckNorris: ऐसा लगता है एसोसिएशन को संभालने के लिए 'DotNetOpenAuth.OpenId' नामस्थान में कक्षाएं हैं, लेकिन मुझे यकीन नहीं है कि ओपनआईडी प्रमाणीकरण प्रक्रिया में किस चरण का उपयोग किया जाता है। ओपनआईडी 2.0 "रिटर्न टू" अनुरोधों में एक assoc_handle होता है जिसका उपयोग वेब ऐप द्वारा किया जा सकता है ताकि यह सत्यापित किया जा सके कि जानकारी सेवा से आई है। वेब ऐप केवल सेवा 'यूआरआई' मोड 'चेक_ प्रमाणीकरण' के साथ एक POST अनुरोध करता है और 'openid.signed' पैरामीटर मान में संदर्भित सभी पैरामीटर। देखें [11.4.2। ओपनआईडी प्रदाता के साथ सीधे सत्यापित करना] (http://tinyurl.com/3ffesj9)। –

+0

@ChuckNorris: मुझे लगता है कि अगर सेवा वापस आईआरआई 'https: // www.google.com/accounts/o8/ud' है, तो लौटाई गई पहचान' https://www.google.com/accounts/ से शुरू होती है o8/'। दूसरे शब्दों में, किसी भी ओपनआईडी प्रदाता को Google ओपनआईडी वापस भेजने की अनुमति न दें। सुनिश्चित करें कि यह Google है। –

1

नहीं है तो एक अन्य संभावित काम के आसपास। अप्रत्यक्ष प्रमाणीकरण अनुरोध (सेवा यूआरआई को रीडायरेक्ट करने) के दौरान, पुरानाopenid.claimed_id और openid.identity पैरामीटर के मान के रूप में ओपनआईडी यूआरएल भेजें, भले ही दायरे नए क्षेत्र में सेट हो।

मेरी डेवलपर मशीन पर, मेरे पास डोमेन 'यह कंप्यूटर' 127.0.0.1 को उपनाम है। जब मैं, दायरे 'http: // thiscomputer' गूगल के OpenID प्रदाता से प्रमाणीकरण का अनुरोध:

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

मैं तो ओपी, दायरे 'से प्रमाणीकरण का अनुरोध http http://specs.openid.net/auth/2.0/identifier_select करने और openid.identity और openid.claimed_id दोनों सेट, मैं वापस की तरह कुछ मिल गया : // localhost 'और openid.identity और openid.claimed_id दोनों http://specs.openid.net/auth/2.0/identifier_select पर सेट हैं। 'Http: // स्थानीय होस्ट'

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

मैं तो ओपी से प्रमाणीकरण का अनुरोध किया, दायरे: मैं वापस की तरह कुछ मिल गया https://www.google.com/accounts/o8/id?id=VGwSBXN7Q00X4G9CTAsLPMJ3m6JaPljpkrURAUZJ करने और openid.identity और openid.claimed_id दोनों सेट (अपने Google खाते का OpenID पहचान जब दायरे 'है http ://यह कंप्यूटर')। मैं वापस मिल:

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

है कि, मैं जब दायरे ': // thiscomputer http' है के रूप में ही OpenID पहचान यूआरएल वापस मिल गया। इस प्रकार, भले ही मैं अपने ओपनआईडी-भरोसेमंद वेब ऐप को 'इस कंप्यूटर' से 'लोकलहोस्ट' में माइग्रेट करता हूं, फिर भी मैं पुराने ओपनआईडी पहचान यूआरएल का उपयोग कर सकता हूं।

यह समाधान तब तक काम करता है जब तक आप उपयोगकर्ता के पुराने ओपनआईडी पहचान यूआरएल को जानते हैं, शायद इसलिए कि यह कुकी में संग्रहीत होता है।

एक टिप्पणी: मैं विभिन्न मूल्यों के लिए openid.identity और openid.claimed_id की स्थापना (जैसे एक http://specs.openid.net/auth/2.0/identifier_select है, जबकि अन्य https://www.google.com/accounts/o8/id?id=VGwSBXN7Q00X4G9CTAsLPMJ3m6JaPljpkrURAUZJ है या एक https://www.google.com/accounts/o8/id?id=VGwSBXN7Q00X4G9CTAsLPMJ3m6JaPljpkrURAUZJ है और अन्य https://www.google.com/accounts/o8/id?id=VGwSBXNwzPQk-puNdfZl4tP-s7JNHPA3WmMHozHJ है) कोशिश की, लेकिन गूगल के ओपी सेवा "के साथ आपके द्वारा अनुरोधित पृष्ठ अमान्य है जवाब दिया । "

संबंधित मुद्दे