2015-09-04 65 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(); 

響應將同時擁有訪問令牌和刷新令牌!乾杯!