ग्राहक OAuth 2.0 में गुप्त


95

Google ड्राइव एपीआई का उपयोग करने के लिए, मुझे OAuth2.0 का उपयोग करके प्रमाणीकरण के साथ खेलना होगा। और मुझे इस बारे में कुछ सवाल मिले।

  1. मेरा ऐप क्या है, इसकी पहचान करने के लिए क्लाइंट आईडी और क्लाइंट सीक्रेट का उपयोग किया जाता है। लेकिन उन्हें हार्डकोड किया जाना चाहिए यदि यह क्लाइंट एप्लिकेशन है। इसलिए, हर कोई मेरे ऐप को डिकम्पोज कर सकता है और उन्हें सोर्स कोड से निकाल सकता है। क्या इसका मतलब है कि एक बुरा ऐप अच्छे ऐप के क्लाइंट आईडी और गुप्त का उपयोग करके एक अच्छा ऐप होने का दिखावा कर सकता है? तो उपयोगकर्ता एक स्क्रीन दिखा रहा होगा जो एक अच्छे ऐप को अनुमति देने के लिए कह रहा है, भले ही यह वास्तव में एक खराब ऐप द्वारा पूछा गया हो? यदि हाँ, तो मुझे क्या करना चाहिए? या वास्तव में मुझे इसकी चिंता नहीं करनी चाहिए?

  2. मोबाइल एप्लिकेशन में, हम अपने ऐप पर एक वेबव्यू एम्बेड कर सकते हैं। और वेबव्यू में पासवर्ड फ़ील्ड को निकालना आसान है क्योंकि जो ऐप अनुमति के लिए पूछ रहा है वह वास्तव में एक "ब्राउज़र" है। तो, मोबाइल एप्लिकेशन में OAuth का यह लाभ नहीं है कि क्लाइंट एप्लिकेशन को सेवा प्रदाता की उपयोगकर्ता क्रेडेंशियल तक पहुंच नहीं है?


2
मुझे यह भी लगता है कि लोग आमतौर पर संदेह करते हैं जब ऐप उनसे उनके फेसबुक, ट्विटर, ड्रॉपबॉक्स या अन्य क्रेडेंशियल्स के लिए पूछता है। मुझे संदेह है कि कई सामान्य लोग OAuth कल्पना पढ़ते हैं और कहते हैं कि "अब मैं सुरक्षित हूं" लेकिन इसके बजाय सामान्य ज्ञान का उपयोग करें और आम तौर पर उन एप्लिकेशन का उपयोग न करें, जिन पर वे भरोसा नहीं करते हैं।
इगोर 41ordaš

वास्तव में एक महान सवाल निश्चित रूप से अधिक अंक होना चाहिए
श्रवण

आप केवल अपने सर्वर से ClientId और रहस्य डाउनलोड कर सकते हैं और इसे पहले सफल लॉगिन पर कीचेन में सेव कर सकते हैं
श्रवण

@Sharvan मैं गलत हो सकता हूं, लेकिन मुझे लगता है कि कीचेन रूट किए गए फोन पर कमजोर हैं, इसलिए आपके क्लाइंट का रहस्य सार्वजनिक किया जा सकता है।
चिचिलाटे

जवाबों:


16

मैंने आपके प्रश्न के लिए एक टिप्पणी लिखना शुरू किया, लेकिन तब पता चला कि कहने के लिए बहुत कुछ है इसलिए उत्तर में इस विषय पर मेरे विचार हैं।

  1. हाँ इसके लिए एक वास्तविक संभावना है और इसके आधार पर कुछ कारनामे थे। सुझाव आपके ऐप में ऐप को गुप्त रखने के लिए नहीं है, यहां तक ​​कि इस कल्पना में भी हिस्सा है कि वितरित ऐप इस टोकन का उपयोग न करें। अब आप पूछ सकते हैं, लेकिन XYZ को काम करने के लिए इसकी आवश्यकता है। उस स्थिति में वे युक्ति को ठीक से लागू नहीं कर रहे हैं और आपको A को उस सेवा का उपयोग नहीं करना चाहिए (संभावना नहीं है) या B ने अपने सर्वर को प्रॉक्सी के रूप में खोजने या उसका उपयोग करने के लिए कठिन बनाने के लिए कुछ मोटे तरीकों का उपयोग करके टोकन को सुरक्षित करने का प्रयास किया है।

    उदाहरण के लिए एंड्रॉइड के लिए फेसबुक लाइब्रेरी में कुछ कीड़े थे जहां यह लॉग्स में टोकन लीक कर रहा था, आप इसके बारे में अधिक जानकारी यहां पा सकते हैं http://attack-secure.com/all-your-facebook-access-tokens-are-belong करने वाली हमें और यहाँ https://www.youtube.com/watch?v=twyL7Uxe6sk । सभी सभी तृतीय पक्ष पुस्तकालयों के आपके उपयोग के लिए अतिरिक्त सतर्क रहें (सामान्य ज्ञान वास्तव में लेकिन अगर टोकन अपहरण आपके बड़े चिंता का विषय है तो सतर्कता के लिए एक और अतिरिक्त जोड़ें)।

  2. मैं काफी समय से बिंदु 2 के बारे में विचार कर रहा हूं। मैंने सहमति के पन्नों को संशोधित करने के लिए अपने एप्लिकेशन में कुछ वर्कअराउंड भी किए हैं (उदाहरण के लिए जूम और एप्लिकेशन को फिट करने के लिए डिज़ाइन बदलते हुए), लेकिन उपयोगकर्ता नाम और पासवर्ड के साथ वेब दृश्य के अंदर फ़ील्ड से मान पढ़ने से मुझे कुछ भी नहीं रोक रहा था। इसलिए मैं आपके दूसरे बिंदु से पूरी तरह सहमत हूं और इसे OAuth कल्पना में एक बड़ा "बग" ढूंढता हूं। बिंदु में "ऐप उपयोगकर्ताओं को क्रेडेंशियल तक पहुंच नहीं देता है" इस कल्पना में कि यह केवल एक सपना है और उपयोगकर्ताओं को सुरक्षा की झूठी भावना देता है ... इसके अलावा, मुझे लगता है कि लोग आमतौर पर संदेह करते हैं जब ऐप उन्हें अपने फेसबुक, ट्विटर, ड्रॉपबॉक्स या अन्य क्रेडेंशियल्स के लिए पूछता है। मुझे संदेह है कि कई सामान्य लोग OAuth कल्पना पढ़ते हैं और कहते हैं कि "अब मैं सुरक्षित हूं" लेकिन इसके बजाय सामान्य ज्ञान का उपयोग करें और आम तौर पर उन एप्लिकेशन का उपयोग न करें, जिन पर वे भरोसा नहीं करते हैं।


3
आपकी क्लाइंट आईडी और क्लाइंट सीक्रेट सिर्फ इसलिए सुरक्षित नहीं होंगे क्योंकि आप उन्हें एसएसएल सुरंग में पोस्ट करते हैं। हां, वे बीच के हमलों में आदमी से अधिक सुरक्षित हैं। यदि कोई उपयोगकर्ता आपके HTTP पर कॉल करता है तो वे खराब प्रमाणपत्र को स्वीकार कर सकते हैं और आपके द्वारा पोस्ट की जाने वाली हर चीज को देख सकते हैं। वैसे, मोबाइल उपकरणों पर ग्राहक के किसी गुप्त को चोरी करने का यह सबसे आसान तरीका है।
एपिकट्रीडेव

5
मैं आपकी टिप्पणी की सराहना करता हूं, लेकिन इसे किसी भी तरह से मेरे उत्तर से जोड़ नहीं सकता ... क्या आप विस्तृत कर सकते हैं कि आपने मेरे उत्तर पर टिप्पणी क्यों की क्योंकि मैंने स्पष्ट रूप से कहा था कि क्लाइंट सीक्रेट को वितरित ऐप्स में उपयोग नहीं किया जाना चाहिए और दूसरा बिंदु यह था कि OAuth का उपयोग करने पर भी ऐप्स में उपयोगकर्ता क्रेडेंशियल्स प्राप्त करने के लिए वर्कअराउंड हैं ताकि उपयोगकर्ताओं को ऐप प्रदाता पर भरोसा होना चाहिए न कि OAuth पर।
इगोर :52ordaš

इसके अलावा, मुझे समझ में नहीं आता है कि "यदि आपका उपयोगकर्ता आपके HTTP कॉल को प्रॉक्सी करता है" तो हाँ उपयोगकर्ताओं को उन डेटा तक पहुंच मिलती है जो उन्होंने HTTP का उपयोग करके भेजे थे और वे प्रॉक्सी कॉल के लिए स्वतंत्र हैं, हालांकि वे उन्हें पसंद करते हैं। जैसा कि मैंने समझा कि आप इसे गुप्त प्राप्त करने के लिए एपीसोड को हटाने के लिए एक अच्छा विकल्प के रूप में सुझा रहे हैं, लेकिन फिर आपको पहले स्थान पर ऐप गुप्त नहीं भेजना चाहिए।
इगोर 55ordaš

तो बिंदु 1 के लिए) खराब एप्लिकेशन को उसी सिस्टम तक पहुंच की आवश्यकता है और उसी डिवाइस से एक्सेस / रिफ्रेश टोकन को पुनः प्राप्त करना है?
गौते

यह स्पष्ट नहीं है कि आप इस संदर्भ में "समान प्रणाली" के रूप में क्या मानते हैं। ऐप एक वेबव्यू बनाता है जिसमें पुष्टिकरण पृष्ठ दिखाया गया है और उस दृश्य में सभी डेटा तक पहुँच प्राप्त कर सकता है (कुकीज़ या url params जिसमें एक्सेस टोकन की मेजबानी शामिल है)। क्रॉस ऐप एक्सेस कुछ मामलों में भी संभव है, उदाहरण के लिए यदि एक ऐप अन्य ऐप लॉग्स तक पहुंच सकता है तो यह टोकन को वहीं मिल सकता है जैसा कि fb lib बग के साथ उल्लेख किया गया है।
इगोर 16ordaš

16

मेरे यहाँ प्रश्न 1 जैसा ही प्रश्न था, और हाल ही में कुछ शोध किया, और मेरा निष्कर्ष यह है कि "क्लाइंट को गुप्त" न रखना ही ठीक है। क्लाइंट की गोपनीयता को गुप्त नहीं रखने वाले ग्राहकों के प्रकार को OAuth2 युक्ति में "सार्वजनिक ग्राहक" कहा जाता है। किसी दुर्भावनापूर्ण व्यक्ति द्वारा प्राधिकरण कोड प्राप्त करने में सक्षम होने और फिर टोकन तक पहुंचने की संभावना को निम्नलिखित तथ्यों द्वारा रोका जाता है।

1. ग्राहक को उपयोगकर्ता से सीधे प्राधिकरण कोड प्राप्त करना होगा, सेवा से नहीं

यहां तक ​​कि अगर उपयोगकर्ता उस सेवा को इंगित करता है जिसे वह क्लाइंट पर भरोसा करता है, तो क्लाइंट को क्लाइंट आईडी और क्लाइंट रहस्य दिखा कर सेवा से प्राधिकरण कोड प्राप्त नहीं किया जा सकता है। इसके बजाय, क्लाइंट को उपयोगकर्ता से सीधे प्राधिकरण कोड प्राप्त करना होगा। (यह आमतौर पर URL पुनर्निर्देशन द्वारा किया जाता है, जिसके बारे में मैं बाद में बात करूंगा।) इसलिए, दुर्भावनापूर्ण ग्राहक के लिए, उपयोगकर्ता द्वारा ग्राहक आईडी / गुप्त पर भरोसा करना पर्याप्त नहीं है। इसे किसी तरह से उपयोगकर्ता को शामिल करना या बिगाड़ना है ताकि इसे प्राधिकरण कोड दिया जा सके, जो कि क्लाइंट आईडी / रहस्य को जानने की तुलना में कठिन होना चाहिए।

2. रीडायरेक्ट URL क्लाइंट आईडी / गुप्त के साथ पंजीकृत है

मान लेते हैं कि दुर्भावनापूर्ण ग्राहक किसी तरह उपयोगकर्ता को शामिल करने और उसे सेवा पृष्ठ पर "इस एप्लिकेशन को अधिकृत करें" बटन पर क्लिक करने में सक्षम बनाता है। यह सेवा से उपयोगकर्ता के ब्राउज़र तक यूआरएल को पुनर्निर्देशित प्रतिक्रिया देगा, जिसके साथ प्राधिकरण कोड होगा। फिर प्राधिकरण कोड को उपयोगकर्ता के ब्राउज़र से रीडायरेक्ट URL पर भेजा जाएगा, और क्लाइंट को प्राधिकरण कोड प्राप्त करने के लिए रीडायरेक्ट URL पर सुनने वाला माना जाएगा। (रीडायरेक्ट URL लोकलहोस्ट भी हो सकता है, और मुझे लगा कि यह एक विशिष्ट तरीका है, जो "सार्वजनिक क्लाइंट" प्राधिकरण कोड है।) चूंकि यह रीडायरेक्ट URL क्लाइंट आईडी / गुप्त के साथ सेवा में पंजीकृत है, इसलिए दुर्भावनापूर्ण क्लाइंट नहीं है। यह नियंत्रित करने का एक तरीका है कि प्राधिकरण कोड कहां दिया गया है।


3
यह आशाजनक है, क्या आपके पास इसके लिए कोई संदर्भ है? यह जानना आश्वस्त होगा।
गौते

1
मैंने ड्राइव डॉक्स में देखा कि इंस्टॉल किए गए ऐप्स में क्लाइंट सीक्रेट वास्तव में सीक्रेट नहीं है, लेकिन उन्होंने यह नहीं बताया कि वहां स्टोर करना क्यों ठीक है। आपके स्पष्टीकरण से बहुत मदद मिली!
मार्टिन स्पासोव

1

दूसरे प्रश्न का उत्तर: सुरक्षा कारणों से Google API यह सुनिश्चित करता है कि प्रमाणीकरण / साइन-इन ऐप के भीतर ही नहीं किया जा सकता है (जैसे कि वेब साक्षात्कार की अनुमति नहीं है) और बेहतर सुरक्षा के लिए ब्राउज़र का उपयोग करके ऐप के बाहर किए जाने की आवश्यकता है जो आगे बताए गए हैं: https: //developers.googleblog.com/2016/08/modernizing-oauth-interactions-in-native-apps.html


कम से कम यह "तय" है 3 साल बाद मैंने पूछा था :)
Bear
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.