2012-09-20 13 views
9

मैं ड्राइव एपीआई थोड़ा सा सीखने के लिए ड्राइव कमांडलाइन आवेदक के साथ खेल रहा हूं। मैं बस सोच रहा हूं कि क्या Google ड्राइव के साथ मेरे डेस्कटॉप एप्लिकेशन को प्रमाणित करना संभव है बिना उपयोगकर्ता को ब्राउजर से ऑथ कोड कॉपी/पेस्ट करने की आवश्यकता है? लेकिन बस ब्राउज़र से ऐप पर वापस एक टोकन पास किया है? मैं ड्रॉपबॉक्स एपीआई और Google दस्तावेज़ सूची एपीआई के साथ ऐसा करने में सक्षम हूं, लेकिन यह समझ नहीं सकता कि यह Google ड्राइव एपीआई के साथ कैसे काम कर रहा है।उपयोगकर्ता ड्राइव को कॉपी/पेस्ट करने के लिए उपयोगकर्ता को आवश्यकतानुसार Google ड्राइव को प्रमाणित कैसे करें?

धन्यवाद।

Google डिस्क API - DriveCommandLine नमूना एप्लिकेशन (थोड़ा संशोधित):

public class DriveCommandLine { 

    private static String CLIENT_ID = APPCONSTANTS.Google.CONSUMER_KEY; 
    private static String CLIENT_SECRET = APPCONSTANTS.Google.CONSUMER_SECRET; 

    private static String REDIRECT_URI = "urn:ietf:wg:oauth:2.0:oob"; 

    public static void main(String[] args) throws IOException, URISyntaxException { 
    HttpTransport httpTransport = new NetHttpTransport(); 
    JsonFactory jsonFactory = new JacksonFactory(); 

    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
     httpTransport, jsonFactory, CLIENT_ID, CLIENT_SECRET, Arrays.asList(DriveScopes.DRIVE)) 
     .setAccessType("offline") 
     .setApprovalPrompt("force").build(); 

    String url = flow.newAuthorizationUrl().setRedirectUri(REDIRECT_URI).build(); 
    System.out.println("Enter authorization code:"); 
    Desktop.getDesktop().browse(new URI(url)); 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    String code = br.readLine(); 

    GoogleTokenResponse response = flow.newTokenRequest(code).setRedirectUri(REDIRECT_URI).execute(); 
    GoogleCredential credential = new GoogleCredential().setFromTokenResponse(response); 

    //Create a new authorized API client 
    Drive service = new Drive.Builder(httpTransport, jsonFactory, credential).build(); 
} 

Google दस्तावेज़ सूची API:

public void authenticate(){ 
      GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters(); 
      oauthParameters.setOAuthConsumerKey(APPCONSTANTS.Google.CONSUMER_KEY); 

      OAuthSigner signer; 
      if (APPCONSTANTS.Google.USE_RSA_SIGNING) { 
        signer = new OAuthRsaSha1Signer(APPCONSTANTS.Google.CONSUMER_SECRET); 
      } else { 
       oauthParameters.setOAuthConsumerSecret(APPCONSTANTS.Google.CONSUMER_SECRET); 
       signer = new OAuthHmacSha1Signer(); 
      } 

      GoogleOAuthHelper oauthHelper = new GoogleOAuthHelper(signer); 

      oauthParameters.setScope(APPCONSTANTS.Google.SCOPES); 

      oauthHelper.getUnauthorizedRequestToken(oauthParameters); 

      String requestUrl = oauthHelper.createUserAuthorizationUrl(oauthParameters); 

      Desktop desktop = Desktop.getDesktop(); 
      URI url = new URI(requestUrl); 
      desktop.browse(url); 

      String token = oauthHelper.getAccessToken(oauthParameters); 
    } 
+0

इन विकल्पों में से प्रत्येक के लिए आप 'redirect_uri' मानों का उपयोग किस प्रकार करते हैं? क्या आप एक ही प्रवाह का उपयोग कर रहे हैं? –

+0

मैंने ओपी में Google दस्तावेज़ सूची API के साथ प्रमाणित करने के लिए अपना कोड जोड़ा। – PseudoPsyche

उत्तर

6

कमांड लाइन नमूने सादगी के लिए लिखा गया है, जरूरी नहीं कि सबसे अच्छा उपयोगकर्ता अनुभव । इस मामले में, वे स्थानीय ऐप्स के रूप में चल रहे हैं और OAuth 2.0 के लिए स्थापित ऐप प्रवाह का उपयोग कर रहे हैं। उस प्रवाह में एक मोड होता है जहां redirect_uri स्थानीयहोस्ट को इंगित कर सकता है, लेकिन इसे रीडायरेक्ट प्राप्त करने के लिए एक अस्थायी वेब सर्वर प्रारंभ करने की आवश्यकता होती है। नमूना जटिल करने के बजाय, यह ओओबी मोड का उपयोग करता है जिसके लिए कोड कॉपी/चिपकाना आवश्यक है।

यदि आप डेस्कटॉप ऐप बना रहे हैं, तो मैं स्थानीयहोस्ट पर रीडायरेक्ट करने के मार्ग पर जाने के लिए प्रोत्साहित करता हूं क्योंकि यह एक बेहतर यूएक्स है।

अधिक जानकारी के लिए https://developers.google.com/accounts/docs/OAuth2InstalledApp देखें।

+0

धन्यवाद! यही वही है जो मैं ढूंढ रहा था! – PseudoPsyche

+0

ठीक है, लेकिन मैं एक नया प्रमाणीकरण कॉल किए बिना संग्रहीत रीफ्रेश टोकन का उपयोग करके एक नया एक्सेस टोकन कैसे प्राप्त कर सकता हूं? यह जावा में निर्दिष्ट नहीं है .. – Aerox

0

अपने रीडायरेक्ट_री को अपने लोकहोस्ट पेज या प्रोजेक्ट पेज पर बदलें। प्रदान किए गए लिंक पर अनुरोध आपके कोड को भेजा जाएगा। अनुरोध में आपके यूआरएल में कोड = "yourauthcode" होगा। उदाहरण: https://yourwebsite.com/yourpage.htm?code= "yourauthcode"

6

चरण 1: ऑफ़लाइन पहुँच प्रकार का उपयोग कर URL जेनरेट करें

flow = new GoogleAuthorizationCodeFlow.Builder(
httpTransport, jsonFactory, CLIENT_ID, CLIENT_SECRET, Arrays.asList(DriveScopes.DRIVE)) 
.setAccessType("offline") 
.setApprovalPrompt("auto").build(); 
String url = flow.newAuthorizationUrl().setRedirectUri(REDIRECT_URI).build(); 

चरण 2: साख स्टोर accessToken और refreshToken

GoogleTokenResponse response = flow.newTokenRequest(code).setRedirectUri(REDIRECT_URI).execute(); 
      GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport) 
       .setJsonFactory(jsonFactory) 
       .setClientSecrets(CLIENT_ID, CLIENT_SECRET) 
       .build() 
       .setFromTokenResponse(response); 
String accessToken = credential.getAccessToken(); 
String refreshToken = credential.getRefreshToken(); 

चरण 3: पुन: उपयोग टोकन जब आवश्यक

GoogleCredential credential1 = new GoogleCredential.Builder().setJsonFactory(jsonFactory) 
.setTransport(httpTransport).setClientSecrets(CLIENT_ID, CLIENT_SECRET).build(); 
credential1.setAccessToken(accessToken); 
credential1.setRefreshToken(refreshToken); 
Drive service = new Drive.Builder(httpTransport, jsonFactory, credential1).build(); 

चरण 4: के तहत त्रुटियों को संभालने और टोकन के ताज़ा करने के लिए OAuth खड़े रहें

+1

हमें 'कोड' कहां मिलती है (चरण 2 में 'flow.newTokenRequest (कोड)' के रूप में?) – michaelsnowden

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