5

सर्वर को मोबाइल ऐप से one-time authorization code प्राप्त होता है। मुझे इसे एक वसंत-सामाजिक पहुंच टोकन में बदलने और टोकन रीफ्रेश करने और बाद में उपयोग के लिए सर्वर डीबी पर सहेजने की आवश्यकता है।स्प्रिंग सोशल Google - सर्वर पर एक बार टोकन/ताज़ा टोकन में एक बार प्राधिकरण कोड को परिवर्तित करना

मेरे वर्तमान कोड: के बाद से ConnectionData पहुंच टोकन और नहीं एक बार प्राधिकरण कोड की उम्मीद है

String oneTimeAuthorizationCode= "xxx"; // provided by mobile client 

ConnectionData cd = new ConnectionData("google", null, null, null, null, oneTimeAuthorizationCode, null, null, null); 
GoogleConnectionFactory googleConnectionFactory = (GoogleConnectionFactory) connectionFactoryLocator.getConnectionFactory("google"); 
Connection<Google> connection = googleConnectionFactory.createConnection(cd); 

// get the google API and work with it 
Google google = (Google) connection.getApi(); 

oneTimeAuthorizationCode गलत है। एक विचार टोकन के लिए एक बार कोड का आदान-प्रदान करने और टोकन रीफ्रेश करने के लिए वसंत-सामाजिक-Google कैसे प्राप्त करें?

उत्तर

2

यह टोकन

String authorizationcode=*****; 
auth2Operations = googleConnectionFactory.getOAuthOperations(); 
AccessGrant accessGrant =auth2Operations.exchangeForAccess(authorizationcode,"Your  redirect uri",null); 
connection = googleConnectionFactory.createConnection(accessGrant); 
Google google=connection.getApi(); 
0

पहुँच यह जा रहा अपने offline access for Google अनुरोध करने की आवश्यकता के लिए जा रहा प्राप्त करने के लिए के लिए प्राधिकरण कोड का आदान प्रदान करने कोड है। अधिकांशतः परिवर्तन केवल क्वेरी पैरामीटर 'access_type = ऑफ़लाइन' जोड़ रहा है, हालांकि आपको वह एक टाइम प्राधिकरण कोड मिला है। फिर आपको प्राधिकरण के बाद रीफ्रेश टोकन वापस मिल जाएगा।

@RequestMapping(value="/{providerId}", method=RequestMethod.POST) 
public RedirectView signIn(@PathVariable String providerId, NativeWebRequest request) { 
    ConnectionFactory<?> connectionFactory = connectionFactoryLocator.getConnectionFactory(providerId); 
    MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>(); 
    preSignIn(connectionFactory, parameters, request); 

    // Request offline access for Google+. Will allow a refreshToken 
    parameters.put("access_type", Arrays.asList("offline")); 

    try { 
     return new RedirectView(connectSupport.buildOAuthUrl(connectionFactory, request, parameters)); 
    } catch (Exception e) { 
     logger.error("Exception while building authorization URL: ", e); 
     return redirect(URIBuilder.fromUri(signInUrl).queryParam("error", "provider").build().toString()); 
    } 
} 
0

समाधान:

 GoogleConnectionFactory connectionFactory = new GoogleConnectionFactory("clientId","clientSecret"); 

     OAuth2Operations oauthOperations = connectionFactory.getOAuthOperations(); 

     MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>(); 

     parameters.put("grant_type", Arrays.asList("authorization_code")); 

     //"authCodeFromAndroid" to be replaced by the authCode sent from Android, and exactly returned from the method "getServerAuthCode()" 
     AccessGrant accessGrant = oauthOperations.exchangeForAccess("authCodeFromAndroid", "", parameters); 

     Connection<Google> connection = googleConnectionFactory.createConnection(accessGrant); 

     //Then you can continue with the ordinary "connection" as usual 
     String providerId = connection.getKey().getProviderId(); 
     String providerUserId = connection.getKey().getProviderUserId(); 

अपने ही परियोजना के लिए, मैं क्वेरी परम मैन्युअल रूप से जोड़ने के लिए है, क्योंकि यह आप बाकी के माध्यम से में इसे पारित करने की अनुमति नहीं है ProviderSignInController को अनुकूलित कर समाप्त हो गया

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