2016-09-01 3 views
0

Я запускаю этот код, но он дает ошибку: redirect_uri_mismatch. Я устанавливаю перенаправление uri в файле client_secret.json. Но каждый раз перенаправление uri выглядит как http://localhost:53271/Callback (номер порта меняется каждый раз), но не тот, который я дал в client_secret.json.Как установить URI перенаправления для OAuth2 для google в java

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

http://localhost/Callback Добавить (без номера порта) в список Перенаправление в вашем удостоверении. Перезагрузите json-файл и используйте его.

+0

Не работает. Я добавил http: // localhost/Callback в учетных данных. Но класс LocalServerReceiver() задает по умолчанию URL-адрес перенаправления каждый раз, когда я запускаю код, например http: // localhost: 37151/Callback. – ParminderBrar

2

Я сталкивался с таким же вопросом, и я решил ее, выполнив одно из следующих двух этапов:

  1. Укажите номер порта при создании учетных данных. Здесь я использую 8080. Затем вам нужно добавить http://localhost:8080/Callback в свой авторизованный URL-адрес перенаправления и обновить секрет json.
    Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver.Builder().setPort(8080).build()).authorize("user8");

  2. Возможно, вы используете идентификаторы клиентов OAuth 2.0 с веб-приложением. Если это только для тестирования, вы можете выбрать «другое» в качестве типа при создании учетных данных, и это спасет вас.

Смежные вопросы