neil_ruaro
neil_ruaro

Reputation: 506

Getting `Request had invalid authentication credentials` when using service account json key file in Go app

I'm developing a Go app on a GCP project and I'm using google cloud logging service. I'm having problems in running the app since it's saying that I have invalid authentication credentials when I'm using a service account json key.

Here's the code snippet having the error:

c, cErr := Load(".env")
    if cErr != nil {
        log.Fatalf("could not load config: %s", cErr)
        return
    }

    // initializes logger which writes to stdout
    ctx := context.Background()
    opt := option.WithCredentialsFile(c.GoogleApplicationCredentials);
    loggerClient, clientErr := logging.NewClient(ctx, "poc-projects-01", opt)
    if clientErr != nil {
        log.Fatal(clientErr)
    }

And here's the definition of the Load() function:

func Load(file string) (*Config, error) {
    viper.SetConfigFile(file)
    viper.AddConfigPath(".")
    viper.AutomaticEnv()
    if err := viper.ReadInConfig(); err != nil {
        return nil, err
    }
    
    c := &Config{
        GoogleApplicationCredentials: viper.GetString("GOOGLE_APPLICATION_CREDENTIALS"),
    }

    return c, nil
}

I have a .env file with the following content: GOOGLE_APPLICATION_CREDENTIALS=json/path-to-json.json

I don't know why it's saying token expired even though this is the only service account json key I have on GCP, and on my local machine.

Upvotes: 2

Views: 1197

Answers (1)

Sai Chandra Gadde
Sai Chandra Gadde

Reputation: 3260

Can you run gcloud auth application-default login and make sure you have that set to the right project.

Check whether GOOGLEAPPLICATIONSCREDENTALS is set with valid JSON key and the environment variable are correctly set, for checking run the below command

echo $GOOGLE_APPLICATION_CREDENTIALS

If the command does not return the correct path to the JSON key, you can set the environment variable with this command:

export GOOGLE_APPLICATION_CREDENTIALS=/path/to/json/key.json

Once you have verified that the JSON key is valid and the environment variable is correctly set, you should be able to run your application.Alternatively, you can try to delete the .env file and then recreate it with the service account json key, which should re-generate the token and make it valid.

Attaching troubleshooting documentation for reference.

Upvotes: 2

Related Questions