Open aeslami3574 opened 4 years ago
Check your client secrets file to make sure it's correct. Possible that you downloaded credentials in the wrong form.
That error indicates it's not in the expected format as isn't either for a server-side web app or installed (desktop) app. Corresponding code: https://github.com/googleapis/google-api-java-client/blob/master/google-api-client/src/main/java/com/google/api/client/googleapis/auth/oauth2/GoogleClientSecrets.java
Ping @aeslami3574 -- please verify your credentials are the correct type. Otherwise will close issue as not reproducible.
I had the same issue using the wrong credentials.json
I have downloaded for a service account, created to access google sheets from a web application. I was banging my head until I discovered that I needed an OAuth credentials, set "Web Application" as application type json file that has been downloaded from google cloud console.
My credentials file should looks like this:
{
"web": {
"client_id": String,
"project_id": String,
"auth_uri": String,
"token_uri": String,
"auth_provider_x509_cert_url": String,
"client_secret": String
}
}
My workaround: Don't use the client secrets, instead, directly build the credentials.
Import this library
<dependency>
<groupId>com.google.auth</groupId>
<artifactId>google-auth-library-oauth2-http</artifactId>
<version>1.3.0</version>
</dependency>
InputStream in = SheetsQuickstart.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
if (in == null) {
throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH);
}
GoogleCredentials googleCredentials = GoogleCredentials.fromStream(in).createScoped(SCOPES);
Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, new HttpCredentialsAdapter(googleCredentials))
.setApplicationName(APPLICATION_NAME)
.build();
My workaround: Don't use the client secrets, instead, directly build the credentials.
Import this library
<dependency> <groupId>com.google.auth</groupId> <artifactId>google-auth-library-oauth2-http</artifactId> <version>1.3.0</version> </dependency>
InputStream in = SheetsQuickstart.class.getResourceAsStream(CREDENTIALS_FILE_PATH); if (in == null) { throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH); } GoogleCredentials googleCredentials = GoogleCredentials.fromStream(in).createScoped(SCOPES); Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, new HttpCredentialsAdapter(googleCredentials)) .setApplicationName(APPLICATION_NAME) .build();
This is the most accurate answer until today. Hopefully, more developers can see this.
My workaround: Don't use the client secrets, instead, directly build the credentials.
Import this library
<dependency> <groupId>com.google.auth</groupId> <artifactId>google-auth-library-oauth2-http</artifactId> <version>1.3.0</version> </dependency>
InputStream in = SheetsQuickstart.class.getResourceAsStream(CREDENTIALS_FILE_PATH); if (in == null) { throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH); } GoogleCredentials googleCredentials = GoogleCredentials.fromStream(in).createScoped(SCOPES); Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, new HttpCredentialsAdapter(googleCredentials)) .setApplicationName(APPLICATION_NAME) .build();
Works like a charm! If you see this - use this
THANK YOU @Johnny850807 Hey @google come on, update your docs!
(Please fill out these details before submitting an issue)
Sample Name
Modified version of https://developers.google.com/sheets/api/quickstart/java
Expected Behavior
Was expecting to receive a
Credential
object after successfully authenticating with the google apiActual
Specifications