在Go应用中使用服务帐户json密钥文件时获取“请求的身份验证凭据无效”

zqdjd7g9  于 2023-02-10  发布在  Go
关注(0)|答案(1)|浏览(175)

我正在开发一个GCP项目的Go应用程序,我使用的是谷歌云日志服务。我在运行应用程序时遇到了问题,因为它说我使用服务帐户json密钥时身份验证凭据无效。
下面是出现错误的代码片段:

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

下面是Load()函数的定义:

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
}

我有一个包含以下内容的.env文件:GOOGLE_APPLICATION_CREDENTIALS=json/path-to-json.json
我不知道为什么它说令牌过期,即使这是我在GCP和我的本地机器上拥有的唯一服务帐户json密钥。

zbwhf8kr

zbwhf8kr1#

您能否运行gcloud auth application-default login并确保将其设置为正确的项目。
检查GOOGLEAPPLICATIONSCREDENTALS是否设置了有效的JSON密钥,环境变量是否设置正确,要进行检查,请运行以下命令

echo $GOOGLE_APPLICATION_CREDENTIALS

如果命令没有返回JSON键的正确路径,可以使用以下命令设置环境变量:

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

验证JSON密钥有效且环境变量设置正确后,您应该能够运行应用程序,或者,您可以尝试删除.env文件,然后使用service account json key重新创建它,service account json key将重新生成令牌并使其有效。
随附故障排除文档以供参考。

相关问题