2016-09-01 2 views
0

einstellen Ich führe diesen Code, aber es gibt Fehler: Redirect_uri_mismatch. Ich Redirect-URI in client_secret.json Datei festgelegt. Aber jedes Mal redirect uri ist wie http://localhost:53271/Callback (Portnummer jedes Mal geändert), aber nicht die, die ich in client_secret.json gegeben habe.Wie Redirect-URI für OAuth2 für Google in 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)); 
     } 
    } 
} 

}

Antwort

1

hinzufügen http://localhost/Callback (ohne die Port-Nummer) in der Liste des URLs in Ihrem Berechtigungsnachweis umleiten. Laden Sie die JSON-Datei erneut herunter und verwenden Sie diese.

+0

Es funktioniert nicht. Ich habe http: // localhost/Callback in Anmeldeinformationen hinzugefügt. Aber die Klasse LocalServerReceiver() setzt jedes Mal eine Standardumleitungs-URL, wenn ich den Code wie http: // localhost: 37151/Callback ausführe. – ParminderBrar

2

stand ich das gleiche Problem, und ich löste es, indem Sie eine der folgenden zwei Schritten vorgehen:

  1. eine Portnummer angeben, wenn Sie die Anmeldeinformationen erstellen. Hier verwende ich 8080. Dann müssen Sie http://localhost:8080/Callback zu Ihrer autorisierten Weiterleitungs-URL hinzufügen und das JSON-Geheimnis aktualisieren.
    Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver.Builder().setPort(8080).build()).authorize("user8");

  2. Sie verwenden wahrscheinlich OAuth 2.0-Client-IDs mit Web-Anwendung. Wenn dies nur für Testzwecke gilt, können Sie beim Erstellen der Anmeldeinformationen "Andere" als Typ auswählen, wodurch Ihnen das Problem erspart wird.

Verwandte Themen