2015-09-04 30 views
0

我需要一种方法来获得谷歌的响应,其中包括授权代码,一旦我从谷歌应用程序市场安装一个应用程序或者有没有办法我可以获得授权码?如何获得谷歌令牌响应,其中包括授权码?

代码,我用它来获取访问令牌

String url = "https://www.googleapis.com/oauth2/v3/token"; 
    URL obj = new URL(url); 
    HttpsURLConnection con = (HttpsURLConnection) obj.openConnection(); 
    con.setRequestMethod("POST"); 
con.setRequestProperty("User-Agent", USER_AGENT); 
    con.setRequestProperty("Accept-Language", "en-US,en;q=0.5"); 

    String urlParameters = "code=authorization code returned from previous request&client_id=my_client_id&client_secret=my_client_secret_from dev console&redirect_uri=google app oauth redirect uri&grant_type=authorization_code"; 
    con.setDoOutput(true); 
    DataOutputStream wr = new DataOutputStream(con.getOutputStream()); 
    wr.writeBytes(urlParameters); 
      wr.flush(); 
+0

将应用程序安装到您的域后,您不会直接获得授权代码。安装之后,您应该通过定期oauth流向应用程序访问您的域。检查此链接以供参考https://developers.google.com/identity/protocols/OAuth2InstalledApp – SGC

+0

嗨SGC,非常感谢您的回复,我现在可以获得授权码,但我必须获得访问令牌并立即使用授权码刷新令牌。我跟着你提到的文件,当我打电话到https://www.googleapis.com/oauth2/v3/token时,我得到'服务器返回的HTTP响应代码:400,URL:https://www.googleapis。 com/oauth2/v3/token'错误.. – KrishHatesCoding

回答

0

确定这是你怎么做。

首先获得授权URL像下面,

String authorizationUrl = new GoogleAuthorizationCodeRequestUrl(
       GoogleOAuthConstants.AUTHORIZATION_SERVER_URL, clientId, 
       nextUrl, GoogleResellerAdvController.SCOPES) 
       .setAccessType("offline").build(); 

一旦被调用时,你会得到将被传递给检索刷新令牌和访问令牌的授权码。 只有当您需要刷新令牌时,setAccessType(“offline”)才是必需的,如果您只需要访问令牌,则可以忽略它,但访问令牌将在一小时内过期。

令牌响应检索:

AuthorizationCodeFlow codeFlow = new AuthorizationCodeFlow.Builder(
       BearerToken.authorizationHeaderAccessMethod(), 
       HTTP_TRANSPORT, 
       JSON_FACTORY, 
       new GenericUrl(GoogleOAuthConstants.TOKEN_SERVER_URL), 
       new ClientParametersAuthentication(
         clientId, clientSecret), 
         clientId, 
         GoogleOAuthConstants.AUTHORIZATION_SERVER_URL 
       ).setScopes(SCOPES).build(); 



     TokenResponse response = codeFlow.newTokenRequest(authorizationCode) 
       .setRedirectUri(redirectUri).setScopes(SCOPES).execute(); 

响应将同时拥有访问令牌和刷新令牌!干杯!