android - सरक - हिंदी में एनएसएस प्रमाण पत्र लाभ




वेबसाइट सेवा प्रमाण-पत्र-ओपनआईडी/एंड्रॉइड खाता प्रबंधक? (3)

मुझे लगता है कि blog.notdot.net/2010/05/… ब्लॉग पोस्ट वही करता है जो आप चाहते हैं। यह मेरे लिए काम किया। यहां पोस्ट किए गए दोनों समाधान व्यवहार्य और चालाक हैं, लेकिन मुझे लगता है कि यह वही करता है जो पूछताछकर्ता पूछ रहा था।

अनिवार्य रूप से, आप केवल "आह" स्कोप का उपयोग करके एक लेख प्राप्त कर रहे हैं, और ACSID कुकी प्राप्त करने के लिए इसे सही वेबपृष्ठ पर पास कर रहे हैं जो आपको किसी भी AppEngine पृष्ठ तक पहुंचने देगा जो प्रमाणीकरण के लिए UserService का उपयोग करता है।

मैं एक webservice बना रहा हूं और उपयोगकर्ता के Google खाता प्रमाण-पत्रों का उपयोग करना चाहता हूं।

सेवा जीएई पर चलती है और एक वेब क्लाइंट और एक एंड्रॉइड देशी क्लाइंट होगा।

यह ऐसा कुछ मेरा पहला प्रयास है और मैं ओपनआईडी और एंड्रॉइड खाता प्रबंधक पुस्तकालय के बारे में पढ़ रहा हूं।

मुझे अभी भी यकीन नहीं है कि मेरे डेटास्टोर में उपयोगकर्ताओं को संग्रहीत करने के मामले में मेरे विकल्प क्या हैं। मुझे किस पहचानकर्ता का उपयोग करना चाहिए? क्या मूल एंड्रॉइड एप्लिकेशन पर ओपनआईडी का उपयोग करना संभव है?

किसी भी मदद और / या पॉइंटर्स की सराहना की जाएगी। धन्यवाद।


मैंने इसके लिए एक उपयुक्त और आधुनिक दिखने का तरीका खोजने के लिए लगभग एक सप्ताह बिताया - बिना वेब ब्राउज़र के और एंड्रॉइड खाता प्रबंधक का उपयोग करके।

यदि आप उपयोगकर्ता को पहचानने के लिए Google खाता और खाता प्रबंधक का उपयोग करना चाहते हैं तो आप यह कर सकते हैं:

  1. पृष्ठभूमि थ्रेड पर AccountManager के माध्यम से Google संपर्कों में अपना टोकन प्राप्त करें (ऑथ टोकन प्रकार "सीपी" है):

    public String getUserToken(Activity activity)
    {
        AccountManager accountManager = AccountManager.get(activity);
        AccountManagerFuture<Bundle> amf = accountManager.getAuthTokenByFeatures("com.google", "cp", null, activity, Bundle.EMPTY, Bundle.EMPTY, null, null );
    
        Bundle bundle = null;
        try {
            bundle = amf.getResult();
            String name = (String) bundle.get(AccountManager.KEY_ACCOUNT_NAME);
            String type = (String) bundle.get(AccountManager.KEY_ACCOUNT_TYPE);
            String token = bundle.getString(AccountManager.KEY_AUTHTOKEN);
            return token;
        } catch (OperationCanceledException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (AuthenticatorException e) {
            e.printStackTrace();
        }
        return null;
    }
    
  2. सुरक्षित चैनल पर सर्वर पर उपयोगकर्ता टोकन प्राप्त करें।

  3. Gdata लाइब्रेरी ( Google डेटा API लाइब्रेरी ) का उपयोग कर Google द्वारा सर्वर पर टोकन को मान्य करें:

    public String getUserId(String token)
    {
        ContactsService contactsService = new ContactsService("Taxi");
        contactsService.setUserToken(token);
    
        IFeed feed = null;
        try {
            feed = contactsService.getFeed(new URL("https://www.google.com/m8/feeds/contacts/default/full?max-results=10000"), ContactFeed.class);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ServiceException e) {
            e.printStackTrace();
        } catch (NullPointerException e) {
            e.printStackTrace();
        }
    
        if (feed == null)
            return null;
    
        String externalId = feed.getId();
        IPerson person = feed.getAuthors().get(0);
        String email = person.getEmail();
        String name = person.getName();
        String nameLang = person.getNameLang();
    
        return externalId;
    }
    
  4. Google टोकन समाप्त हो सकता है (आमतौर पर एक घंटे के बाद), इसलिए यदि आप सर्वर पर टोकन को सत्यापित करने में विफल रहे हैं, तो आपको क्लाइंट को प्रतिक्रिया भेजनी होगी, टोकन को अमान्य कर देना होगा और एक नया प्राप्त करना होगा। टोकन को अमान्य करने के लिए खाता प्रबंधक का उपयोग करें:

    public void invalidateUserToken(Context context, String token)
    {
        AccountManager accountManager = AccountManager.get(context);
        accountManager.invalidateAuthToken("com.google", token);
    }
    

पिछली परियोजना पर हमारी समान आवश्यकताएं थीं: जीडब्ल्यूटी फ्रंटेंड और एंड्रॉइड / आईफोन क्लाइंट के साथ जीएई बैकएंड। इसके अलावा, हम उपयोगकर्ता प्रमाण-पत्रों को स्टोर नहीं करना चाहते थे।

इसलिए हम ओपनआईडी का उपयोग करना चुनते हैं, जो दुर्भाग्य से एक वेब मानक है और मोबाइल उपकरणों के साथ अच्छा नहीं खेलता है, लेकिन यह करने योग्य है।

जीएई पक्ष पर हमने बस संघीय लॉगिन सक्षम किया जिसने हमें ओपनआईडी दिया।

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

यह सब बहुत सरल है। अब यहां मुश्किल हिस्सा है: उपयोगकर्ता लॉगिन की पुष्टि करने के बाद, ओपनआईडी हमारे जीएई रिटर्न यूआरएल पर वापस रीडायरेक्ट करता है (अनुरोध होने पर आपको यह यूआरएल प्रदान करने की आवश्यकता है)। इस यूआरएल पर हम एक कस्टम यूआरएल बनाते हैं, उदाहरण के लिए:

yourappname://usrname#XXXYYYZZZ

जहां XXXYYYZZZZ ऑथ टोकन है। हमें रिटर्न पेज से यह टोकन मिलता है जहां इसे एसीएसआईडी कुकी के रूप में संग्रहीत किया जाता है: हमने इस कुकी को पढ़ने और इसे ऊपर के कस्टम यूआरएल में लपेटने के लिए कुछ जेएसपी का इस्तेमाल किया।

फिर हम आपके एंड्रॉइड और आईफोन ऐप्स को अपने yourappname:// यूआरएल को संभालने के लिए पंजीकृत करते हैं, ताकि जब उपयोगकर्ता इस लिंक को क्लास्क कर लेता है, तो हमारा ऐप लगाया जाता है और लिंक इसे पास कर दिया जाता है। हम इस लिंक से उपयोगकर्ता नाम और टोकन निकालते हैं और हम इसे जीएई बैकएंड में आरईएसटी अनुरोधों में उपयोग करते हैं।

यदि आपके कोई और प्रश्न हैं तो मैं खुशी से इस पोस्ट को अपडेट करूंगा।

अद्यतन करें:

उत्पादन AppEngine पर उपयोगकर्ता सत्र कुकी को ACSID नाम दिया ACSID , जबकि विकास AppEngine सर्वर पर इसे dev_appserver_login नाम दिया dev_appserver_login





accountmanager