में HTTP प्रमाणीकरण चुनौतियों का जवाब कैसे दें मेरे ऐप में मैं HTTPS पर वेब सेवा पर HTTP कॉल करता हूं। मेरी इच्छा है कि मेरे क्लाइंट को इस तरह से डिजाइन करना है कि प्रमाणीकरण चुनौती होने पर यह केवल उपयोगकर्ता को उनके उपयोगकर्ता नाम और पासवर्ड के लिए पूछता है। मैं प्रतिक्रियाशील होना चाहता हूं, प्रीemptive नहीं। मेरे ऐप की प्रकृति के कारण, कुछ ऐसे मामले हैं जहां इसे प्रमाणित करने की आवश्यकता नहीं होगी।Android
आईओएस में, इस प्रक्रिया को NSURLConnectionDelegateProtocol के माध्यम से बहुत आसान बना दिया गया है, जो मेरे ऐप के आईओएस संस्करण में लागू किया गया है। इस वर्ग का उपयोग करके एक कनेक्शन बनाया जाता है, और केवल तभी जब एक चुनौती प्रस्तुत की जाती है, वर्ग कक्षा के प्रमाणीकरण प्रमाण-पत्रों के लिए अपने प्रतिनिधि से पूछता है।
एंड्रॉइड में यह कैसे किया जा सकता है? AuthenticationHandler का उपयोग करना? या शायद Authenticator? यदि ऐसा है, तो उदाहरण या ट्यूटोरियल प्रदान किया जा सकता है?
संपादित करें 1:
प्रमाणक वर्ग (नीचे मेरा उत्तर देखें) अब मैं चुनौतियों प्रमाणीकरण के लिए प्रतिक्रिया करने में सक्षम हूँ, लेकिन वर्तमान में केवल हार्ड-कोडेड पहचान के साथ उपयोग करना। मैं उपयोगकर्ता को उपयोगकर्ता नाम और पासवर्ड के लिए संकेत देना चाहता हूं। Android documentation के अनुसार, getPasswordAuthentication
विधि के भीतर आप "आमतौर पर आवश्यक इनपुट के लिए उपयोगकर्ता को संकेत देते हैं"।
यह कैसे संभव है? यूआई थ्रेड को अवरुद्ध किए बिना, जो मुझे पता है/नहीं किया जाना चाहिए, आप एक संवाद कैसे प्रदर्शित कर सकते हैं, उपयोगकर्ता इनपुट के लिए प्रतीक्षा कर सकते हैं, फिर दर्ज किए गए प्रमाण-पत्र पुनर्प्राप्त कर सकते हैं और उन सभी को वापस कर सकते हैं?
संपादित 2:
जबकि वहाँ थोड़ा हैं या प्रमाणक वर्ग के उपयोग पर कोई उदाहरण है, क्या मैं खोजने के लिए सक्षम किया गया है पता चलता है कि निवेश के लिए उपयोगकर्ता को संकेत एक एकल विधि के भीतर से असंभव है, getPasswordAuthentication
की तरह। Apache HTTP ग्राहक के लिए वापस लौटने के लिए ... हो सकता है
अंतिम संपादित:
मैं अभी भी HttpURLConnection उपयोग कर रहा हूँ, लेकिन क्या एडवर्ड नीचे का सुझाव दिया की तर्ज पर कुछ कर रही। प्रमाणीकरण चुनौतियों को संभालने और इनपुट के लिए उपयोगकर्ता को संकेत देने के लिए कोई कॉन्फ़िगर करने योग्य वर्ग प्रतीत नहीं होता है, इसलिए मैं इसे मैन्युअल रूप से कर रहा हूं।
मैं java.net का उपयोग करने का भी प्रयास कर रहा हूं, क्योंकि ऐसा लगता है कि आगे बढ़ने वाला सबसे समर्थित विकल्प होगा। मैंने जो सुझाव दिया है उसे मैं कोशिश करूंगा। क्या आपने कभी प्रमाणीकरण वर्ग का उपयोग करने का प्रयास किया है? – Groppe
उपरोक्त मेरे संपादन देखें। –
धन्यवाद। मैंने जो पढ़ा है, उससे एक संवाद पॉप अप करना (जो मैं करना चाहता हूं) दुर्भाग्य से प्रमाणीकरणकर्ता के getPassword प्रमाणीकरण विधि के भीतर से संभव नहीं है। – Groppe