2012-05-11 16 views
7

मैं एक एंड्रॉइड ऐप लिख रहा हूं जो रिमोट सर्वर से बात करता है, और मैं ऐप उपयोगकर्ताओं को अपने फोन पर रहने वाले Google प्रमाण-पत्रों का उपयोग कर सर्वर में लॉग इन करने की अनुमति देना चाहता हूं, यानी आवश्यकता के बिना उपयोगकर्ता को मेरे ऐप में कहीं भी अपना Google पासवर्ड दर्ज करना है। उदाहरण के लिए, यदि उपयोगकर्ता का (एंड्रॉइड) फोन "[email protected]" के साथ कॉन्फ़िगर किया गया है, और फिर वे मेरे ऐप को इंस्टॉल और चलाते हैं, तो मेरा ऐप उन्हें एक संवाद के साथ पेश करेगा, "क्या आप कुछ गुई के रूप में साइन इन करना चाहते हैं @ gmail.com? ", और एक ओके बटन मारने पर उन्होंने मेरे सर्वर पर एक आईडी स्थापित की होगी जो जानता है कि उनका ईमेल पता [email protected] है, जैसा कि Google द्वारा प्रमाणित है।एंड्रॉइड ऐप के भीतर Google खाता प्रमाणीकरण

मुझे Google के अपने oauth2 दस्तावेज समेत इस बारे में व्यापक और विविध आंशिक व्यंजन मिल गए हैं, लेकिन यह सब कुछ कैसे किया जाए, इसकी समझ को परिभाषित नहीं किया है।

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

पिछली बात यह है कि, मैं अपने पहियों को बहुत कताई कर रहा हूं। व्यंजनों मैं देखा है मेरी इस फार्म के एक http प्राप्त करने के लिए कॉल करने के लिए लग रहे हैं:

http://<myWebServer>.com/_ah/login?continue=<someUrlIChoose>&auth=<authToken> 

... जो (क) कि यह AppEngine के लिए विशिष्ट प्रतीत होता है में dissatisfying है और मैं स्वतंत्रता चाहते हैं इसे मेरी पसंद के किसी भी पिछली छोर पर चलाने के लिए, और (बी) एपेंगेन के साथ भी प्रयोग करने के लिए, मैंने जो ऐपेंगिन इंस्टेंस सेट अप किया है, उसे बिल्कुल संकेत नहीं दिया जाता है, यानी लॉग अब दिखाते हैं (मैं उम्मीद कर रहा था someUrlIChoose यूआरएल कुछ के साथ बुलाया गया होगा) ... इसलिए टोकन की वैधता के बारे में सूचित करने के लिए कोई अवसर नहीं है।

विशिष्ट सवालों में शामिल हैं:

  • क्या मैं प्रमाणीकरण टोकन के साथ क्या करते हैं ... मैं अपने सर्वर पर भेज करते हैं, और किसी भी तरह के लिए टोकन की मान्यता सत्यापित करने के लिए अपने सर्वर से संपर्क करें गूगल है निर्दिष्ट खाता? या क्या कुछ बैकचैनल संचार है जो पहले से ही है ( प्रक्रिया के इस चरण में) Google सर्वर से उत्पन्न हुआ है ताकि मेरे सर्वर को सूचित किया जा सके कि यह टोकन मान्य है (और यदि ऐसा है, तो मैं इसे कैसे सेट अप करूं)? या कुछ और?
  • क्या मुझे लगता है कि यह प्रक्रिया किसी भी पिछली छोर के संदर्भ में संदर्भ में करने योग्य है (केवल ऐपेंगिन नहीं)?
  • क्या oauth2 मुझे क्या उपयोग करना चाहिए (oauth1 के विपरीत, या और कुछ)? जो कुछ भी मैंने पढ़ा है, वह यह दर्शाता है कि oauth2 के लिए Google का समर्थन "प्रयोगात्मक" है ... लेकिन मुझे पता नहीं चला है कि दावे वर्तमान या पुराने हैं; और यहां तक ​​कि अगर वर्तमान में, Google के पास स्थायी गैर-अंतिम रूप में विभिन्न उत्पादों को रखने का इतिहास है (उदा। शाश्वत बीटा), इसलिए मुझे नहीं पता कि इसके बारे में क्या निष्कर्ष निकालना है। बाकी
  • कोई भी चीज जो प्रासंगिक है ...

उत्तर

0

यह आपके लिए क्या loooking कर रहे हैं?

अधिकांश एंड्रॉइड ऐप्स में डेटा को जारी रखने और साझा करने के लिए सर्वर-साइड बैक एंड का कुछ प्रकार होता है। यहां तक ​​कि सबसे बुनियादी खेल को खिलाड़ियों के उच्च स्कोर याद रखने की आवश्यकता है।जब आप अपना बैक एंड बना रहे हैं, तो एक समस्या आपको हल करना होगा कि बैक एंड कोड कैसे जानता है कि यह किस ऐप से बात कर रहा है और इसका उपयोग करने वाला व्यक्ति कौन है।

आपके पास शायद आपके क्लाइंट ऐप्स के साथ संचार करने के लिए HTTP अंतराल हैं, लेकिन सर्वर-साइड कोड यह सुनिश्चित कर सकता है कि संदेश संदेश कौन भेज रहा है? आखिरकार, कोई भी HTTP POST अनुरोध कहीं से भी भेज सकता है; क्या वे आपके उपयोगकर्ताओं का प्रतिरूपण कर सकते हैं अगर वे पहचान अनुमान लगा सकते हैं?

यह वास्तव में उपयोगकर्ता-अप्रासंगिक है कि लोगों को मोबाइल उपकरणों पर उपयोगकर्ता नाम और पासवर्ड टाइप करने के लिए कहा जाए। विशेष रूप से, अगर किसी ने को अपना ऐप इंस्टॉल किया है और इसे इंटरनेट का उपयोग करने की अनुमति दी है और अपनी पहचान पता है, तो उन्हें और भी परेशान नहीं किया जाना चाहिए।

ऐसा लगता है कि Google Play सेवाएं, अब उपलब्ध हर संगत Android चल डिवाइस पर जारी 2.2 या उच्चतर, इस समस्या का एक अच्छा समाधान, Google खातों के उपयोग के आधार पर प्रदान करता है।

http://android-developers.blogspot.se/2013/01/verifying-back-end-calls-from-android.html

2

आप गूगल प्ले-services_lib आयात करना होगा की तुलना में बाद आप इस कोड का उपयोग कर सकते हैं:

import com.google.android.gms.auth.GoogleAuthUtil; 
import com.google.android.gms.auth.UserRecoverableAuthException; 

private void gmail_login() { 

    dialog = ProgressDialog.show(LoginActivity.this, "", getString(R.string.login_loading), true); 

    AsyncTask task = new AsyncTask() { 
     @Override 
     protected Object doInBackground(Object... params) { 
       getAndUseAuthTokenBlocking(); 
      return null; 
     } 
    }; 
    task.execute((Void)null); 
} 


void getAndUseAuthTokenBlocking() { 
    try 
    { 
     String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/userinfo.email"; 
     AccountManager accountManager = AccountManager.get(this); 
     Account[] accounts = accountManager.getAccountsByType("com.google"); 

     String token = GoogleAuthUtil.getToken(this, accounts[0].name, AUTH_TOKEN_TYPE); 
     //token here 
    } 
    catch (UserRecoverableAuthException userAuthEx) { 
     startActivityForResult(userAuthEx.getIntent(), MY_ACTIVITYS_AUTH_REQUEST_CODE); 
    }catch (Exception e){ 
     DropErrorMsg.drop(this, handler, R.string.connection_error, R.string.error, dialog, false); 
    } 
} 
संबंधित मुद्दे