2012-03-09 22 views
5

मैं अपने पीएचपी एप्लिकेशन में Google Apps का एकीकरण पर काम कर रहा हूँ। मैं पहले से ही एक प्रवेश प्रणाली है जो, जो डेटाबेस में संग्रहीत हो जाता है जब उपयोगकर्ता के प्रवेश (उपयोगकर्ता नाम और पासवर्ड दर्ज करने के बाद) एक उपयोगकर्ता के लिए एक सत्र आईडी प्रदान करती है। सत्र आईडी के (निष्क्रियता की एक निश्चित समय उपयोगकर्ता द्वारा कॉन्फ़िगर करने के बाद अमान्य हो , 5 मिनट, 15, 60 हो सकता है ...)। उस सत्र आईडी को यूआरएल में पास किया गया है यह जांचने के लिए कि कोई उपयोगकर्ता अभी भी लॉग इन है या नहीं। लॉग आउट करते समय, सत्र आईडी डेटाबेस से हटा दी जाती है।Google Apps और OAuth सर्वोत्तम प्रथाओं

मैंने लॉग इन करते समय डेटाबेस में अपनी Google आईडी संग्रहीत करके Google के साथ लॉग इन करने दिया, मैं एक्सेस टोकन का अनुरोध करता हूं, userinfo से पूछता हूं, यह देखने के लिए कि क्या Google आईडी डेटाबेस में है और यदि ऐसा है, तो असाइन करें इस उपयोगकर्ता को सत्र आईडी। चूंकि मैं अन्य एपीआई से पूछताछ करने में सक्षम होना चाहता हूं, इसलिए मैं डेटाबेस में एक्सेस टोकन जेसन भी स्टोर करता हूं। जब कोई उपयोगकर्ता लॉग आउट करता है, तो डेटाबेस से एक्सेस टोकन भी हटा दिया जाता है।

यह काम करता है, मेरी उपयोगकर्ता अपने Google खाते का उपयोग करके प्रवेश करने में सक्षम हैं और मैं एपीआई संग्रहीत ACCESS_TOKEN का उपयोग कर क्वेरी कर सकता है, फिर भी कुछ बातें मुझे मेरे कार्यप्रवाह के बारे में अनिश्चित लग रहा है की भद्दा लग रहा है:

  • क्या आप एक refresh_token मिल force_approval है, मैं की तरह मैं इस ताज़ा टोकन का उपयोग किया जाना चाहिए एक नया पहुंच टोकन प्राप्त करने के बजाय डेटाबेस से पुराने एक को दूर करने और फिर से एक नया एक में जब उपयोगकर्ता के लॉग में प्रवेश लग रहा है। दूसरी तरफ, लॉग इन करते समय, मुझे नहीं पता कि यह अभी तक कौन है, इसलिए मुझे नहीं पता कि कौन से ताज़ा टोकन का उपयोग करना है। हो सकता है कि मैं गलत समझ रहा हूं कि ताज़ा टोकन क्या है। साथ ही, मैं वास्तव में हर बार अनुमोदन को मजबूर नहीं करना चाहता, इसलिए मैं उस मामले में refresh_token का भी उपयोग नहीं कर सकता।

  • जैसा कि पहले कहा, उन निर्धारित कर सकते हैं कितनी देर तक अपने सत्र चलेगा, हालांकि, गूगल ACCESS_TOKEN हमेशा 3600 सेकंड की होती है। यह वास्तव में बेवकूफ होगा यदि उपयोगकर्ता सिस्टम पर एक घंटे काम करेंगे और उसके बाद Google एपीआई अचानक विफल हो जाएंगे, जिससे उन्हें फिर से लॉग इन करने के लिए मजबूर किया जा सकेगा। Google OAuth खेल का मैदान "चेक-टाइम से पहले ऑटो-रीफ्रेश टोकन" चेकबॉक्स दिखाता है, लेकिन मुझे यह नहीं दिख रहा है कि यह कैसे करें। क्या मुझे यहां ताज़ा टोकन का उपयोग करना है? या बस पृष्ठभूमि में एक नया टोकन का अनुरोध करें (अगर मैं अनुमोदन मजबूर नहीं कर रहा हूं)?

  • फिलहाल, मैं उपयोगकर्ता आईडी खोजने के लिए userinfo क्वेरी (https://www.googleapis.com/oauth2/v2/userinfo) का उपयोग कर रहा हूं, लेकिन मैं टोकनइन्फो (https://www.googleapis.com/oauth2/v1/tokeninfo)। Tokeninfo OAuth खेल का मैदान में सूचीबद्ध नहीं है, लेकिन परिणाम दिखाने कब तक टोकन मान्य रहती है (हालांकि, मैं भी इस अपने आप गणना कर सकते हैं) करता है। क्या एक दूसरे पर बेहतर है?

  • मैं डेटाबेस में पूरे json वस्तु भंडारण कर रहा हूँ (ACCESS_TOKEN, id_token, expires_in और token_type) लेकिन मैं अपने एप्लिकेशन को अभी भी पूरी तरह से काम करता है, तो मैं केवल ACCESS_TOKEN स्टोर करेगा महसूस (केवल समस्या मैं पूर्वानुमान है अगर expires_in समय परिवर्तन)। क्या मुझे id_token को उदाहरण के लिए स्टोर करने की आवश्यकता है?

मैं अगर किसी को भी जानकारी के किसी भी अन्य अच्छा स्रोत जानता है (developers.google.com पर) गूगल में दस्तावेज़ प्राप्त कभी कभी बहुत कमी है,, मैं भी उन में दिलचस्पी रखता हूँ।

उत्तर

4

मुझे लगता है कि अगर आप सबसे हालिया OpenID Connect Specs पर एक नज़र डालें तो उपयोगकर्ता मदद कर सकता है, जहां userinfo एंडपॉइंट की अवधारणाएं आती हैं। ओपनआईडी कनेक्ट ओएथ 2 के शीर्ष पर बनाया गया है। वहां बहुत कुछ है, लेकिन यह अभी भी एक नजर के लायक है। This blog article भी बहुत अच्छा है (जैसा कि एक ही ब्लॉग में अन्य हैं)।

दुर्भाग्य से, मुझे नहीं लगता कि गूगल के कार्यान्वयन वर्तमान में नवीनतम कल्पना ड्राफ्ट के साथ अप टू डेट है तो यह शायद कुछ समय के लिए एक चलती लक्ष्य होगा है। पिछले कुछ वर्षों में ये चीजें बहुत बदल गई हैं।

मैं आपके पहले बिंदु से सहमत हूं कि जब भी आप किसी पुराने उपयोगकर्ता को रीफ्रेश करने के बजाय उपयोगकर्ता को प्रमाणित करते हैं तो आपको एक नया एक्सेस टोकन प्राप्त करना चाहिए। आप नहीं जानते कि उपयोगकर्ता किसने लॉग इन किया है और आपको टोकन तक पहुंच प्रदान नहीं की है। आम तौर पर, एक्सेस टोकन का जीवनकाल उपयोगकर्ता के सत्र से जुड़ा नहीं होता है। एक बार जारी होने के बाद, आपका आवेदन उपयोगकर्ता की उपस्थिति से स्वतंत्र रूप से संसाधनों तक पहुंचने के लिए सैद्धांतिक रूप से इसका उपयोग कर सकता है। यदि आप टोकन समाप्ति समय से परे संसाधन तक पहुंच बनाना चाहते हैं, तो आपको उस बिंदु पर रीफ्रेश टोकन सबमिट करने की आवश्यकता है ताकि एक नया एक्सेस टोकन प्राप्त हो सके। मुझे डर है कि मुझे नहीं पता कि "ऑटो-रीफ्रेश" सुविधा क्या है।

मेरा मानना ​​है कि Google का tokeninfo ओपनआईडी कनेक्ट के check_id एंडपॉइंट के समान है, लेकिन बाद वाले के बजाए या तो एक्सेस टोकन या आईडी टोकन स्वीकार करता है। ध्यान दें कि दोनों का समाप्ति समय भिन्न हो सकता है। आप आम तौर पर एंडपॉइंट से check_id की तुलना में अधिक विस्तृत उपयोगकर्ता डेटा पुनर्प्राप्त करने में सक्षम होंगे, जो आम तौर पर user_id को वापस ले जाएगा।

आपको id_token स्टोर करने की आवश्यकता नहीं है। यह प्रमाणीकरण सर्वर द्वारा उपयोगकर्ता के प्रमाणीकरण के रिकॉर्ड की तरह थोड़ा सा है। एक्सेस टोकन वह है जो आपके उपयोगकर्ता को उपयोगकर्ता पहचान सत्यापित करने के बाद बनाए रखने में रुचि रखेगा।

+0

धन्यवाद आपके इनपुट के लिए बहुत कुछ, मैं आपके द्वारा प्रदान किए गए लेख पढ़ूंगा और आशा करता हूं कि वे मुझे रास्ते में मदद करेंगे। – Bram

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