Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IllegalArgumentException being thrown when trying to authenticate with google sheets api #93

Open
aeslami3574 opened this issue Dec 2, 2019 · 6 comments
Assignees

Comments

@aeslami3574
Copy link

(Please fill out these details before submitting an issue)

Sample Name

Modified version of https://developers.google.com/sheets/api/quickstart/java

private Credential getCredentials(NetHttpTransport httpTransport) {
    try {
        GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(new FileInputStream(credentialsFilePath)));
        GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(httpTransport, JSON_FACTORY, clientSecrets, SCOPES)
                .setDataStoreFactory(new FileDataStoreFactory(new File(credentialsFilePath))).setAccessType("offline")
                .build();
        return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver.Builder().setPort(8888).build()).authorize("user");
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

Expected Behavior

Was expecting to receive a Credential object after successfully authenticating with the google api

Actual

Exception in thread "main" java.lang.IllegalArgumentException
	at com.google.api.client.repackaged.com.google.common.base.Preconditions.checkArgument(Preconditions.java:111)
	at com.google.api.client.util.Preconditions.checkArgument(Preconditions.java:37)
	at com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets.getDetails(GoogleClientSecrets.java:82)
	at com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow$Builder.<init>(GoogleAuthorizationCodeFlow.java:195)

Specifications

  • Java version: 11.0.5
  • OS: Linux (Debian 10.2 Buster)
@sqrrrl
Copy link
Member

sqrrrl commented Dec 3, 2019

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

@sqrrrl sqrrrl self-assigned this Dec 3, 2019
@sqrrrl
Copy link
Member

sqrrrl commented Jan 21, 2020

Ping @aeslami3574 -- please verify your credentials are the correct type. Otherwise will close issue as not reproducible.

@cdolek
Copy link

cdolek commented Oct 15, 2020

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
	}
}

@Johnny850807
Copy link

Johnny850807 commented Apr 9, 2022

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();

@weehong
Copy link

weehong commented Jul 11, 2022

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.

@velikanov
Copy link

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!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants