2016-09-01 7 views
0

このコードを実行しますが、エラー:redirect_uri_mismatch .I client_secret.jsonファイルにリダイレクトuriを設定しています。しかし、リダイレクトuriは毎回http://localhost:53271/Callback(ポート番号は毎回変更されます)のようですが、私がclient_secret.jsonで与えたものではありません。GoogleでOAuth2のリダイレクトURIを設定する方法

public class SheetsQuickstart { 

private static final String APPLICATION_NAME = "Web client 1"; 

    private static final java.io.File DATA_STORE_DIR = new java.io.File(
    System.getProperty("user.home"), ".credentials/sheets.googleapis.com-java-quickstart"); 

/** Global instance of the {@link FileDataStoreFactory}. */ 
private static FileDataStoreFactory DATA_STORE_FACTORY; 

/** Global instance of the JSON factory. */ 
private static final JsonFactory JSON_FACTORY = 
    JacksonFactory.getDefaultInstance(); 

/** Global instance of the HTTP transport. */ 
private static HttpTransport HTTP_TRANSPORT; 

/** Global instance of the scopes required by this quickstart. 
* 
* If modifying these scopes, delete your previously saved credentials 
* at ~/.credentials/sheets.googleapis.com-java-quickstart 
*/ 
private static final List<String> SCOPES = 
    Arrays.asList(SheetsScopes.SPREADSHEETS_READONLY); 

static { 
    try { 
     HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); 
     DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR); 
    } catch (Throwable t) { 
     t.printStackTrace(); 
     System.exit(1); 
    } 
} 

/** 
* Creates an authorized Credential object. 
* @return an authorized Credential object. 
* @throws IOException 
*/ 
public static Credential authorize() throws IOException { 
    // Load client secrets. 
    InputStream in = 
     SheetsQuickstart.class.getResourceAsStream("/client_secret.json"); 
    GoogleClientSecrets clientSecrets = 
     GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in)); 

    // Build flow and trigger user authorization request. 
    GoogleAuthorizationCodeFlow flow = 
      new GoogleAuthorizationCodeFlow.Builder(
        HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES) 
      .setDataStoreFactory(DATA_STORE_FACTORY) 
      .setAccessType("offline") 
      .build(); 
    Credential credential = new AuthorizationCodeInstalledApp(
     flow, new LocalServerReceiver()).authorize("user"); 
    System.out.println(
      "Credentials saved to " + DATA_STORE_DIR.getAbsolutePath()); 
    return credential; 
} 

/** 
* Build and return an authorized Sheets API client service. 
* @return an authorized Sheets API client service 
* @throws IOException 
*/ 
public static Sheets getSheetsService() throws IOException { 
    Credential credential = authorize(); 
    return new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential) 
      .setApplicationName(APPLICATION_NAME) 
      .build(); 
} 

public static void main(String[] args) throws IOException { 
    // Build a new authorized API client service. 
    Sheets service = getSheetsService(); 

    // Prints the names and majors of students in a sample spreadsheet: 
    // https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit 
    String spreadsheetId = "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"; 
    String range = "Class Data!A2:E"; 
    ValueRange response = service.spreadsheets().values() 
     .get(spreadsheetId, range) 
     .execute(); 
    List<List<Object>> values = response.getValues(); 
    if (values == null || values.size() == 0) { 
     System.out.println("No data found."); 
    } else { 
     System.out.println("Name, Major"); 
     for (List row : values) { 
     // Print columns A and E, which correspond to indices 0 and 4. 
     System.out.printf("%s, %s\n", row.get(0), row.get(4)); 
     } 
    } 
} 

}

答えて

1

あなたの資格で、リダイレクトURLのリストに(ポート番号なし)http://localhost/Callbackを追加します。 jsonファイルを再ダウンロードし、そのファイルを使用します。

+0

動作しません。私は、資格情報にhttp:// localhost/Callbackを追加しました。しかしLocalServerReceiver()クラスは、http:// localhost:37151/Callbackのようなコードを実行するたびにデフォルトのリダイレクトURLを設定します。 – ParminderBrar

2

私は同じ問題に直面し、私は次の2つの手順のいずれかを実行して、それを解決:

  1. あなたは資格を作成するときに、ポート番号を指定します。ここで私は8080を使用しています。次に、許可されたリダイレクトURLにhttp://localhost:8080/Callbackを追加し、jsonの秘密を更新する必要があります。
    Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver.Builder().setPort(8080).build()).authorize("user8");

  2. おそらくWebアプリケーションでOAuth 2.0クライアントIDを使用している可能性があります。これがテストのためだけの場合は、資格情報を作成するときにタイプとして「その他」を選択すると、問題を軽減できます。