首页 > 解决方案 > 来自 Google 凭据服务帐户的令牌 NULL

问题描述

我正在尝试使用以下代码检索我的 Google 服务帐户的凭据:

package function

import com.amazonaws.services.lambda.runtime.Context
import com.amazonaws.services.lambda.runtime.LambdaLogger
import com.amazonaws.services.lambda.runtime.RequestHandler
import pojo.Request

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential
import com.google.api.services.sqladmin.SQLAdminScopes
import pojo.Response



class GoogleAuth implements RequestHandler<Request, Response> {

    private LambdaLogger logger

    @Override
    Response handleRequest(Request input, Context context) {

        logger = context.getLogger()
        ClassLoader classLoader = getClass().getClassLoader()
        File jsonCredentials = new File(classLoader.getResource("leads-cloud-function-service-account.json").getFile())
        FileInputStream fis = new FileInputStream(jsonCredentials)


        GoogleCredential credential = GoogleCredential.fromStream(fis).createScoped(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN))

        credential.getClientAuthentication()

        println("Thai test" + credential.getExpirationTimeMilliseconds())
        print("This is the credential" + credential.getAccessToken())

        return (new Response())

    }
}

关于过期毫秒数和 AccessToken 的信息为空。有没有人经历过这个?

标签: google-oauthgoogle-oauth-java-client

解决方案


因此,我通过在 getToken 之前添加以下命令自己解决了这个问题:

credential.refreshToken()

这在谷歌的网站上没有正确记录,但在添加它之后,它工作得很好,结果以实际值显示。

我遇到的其他一些错误是“com.google.common.io.ByteStreams.exhaust(Ljava/io/InputStream;)J”,为了解决它,我必须更正我使用的依赖项:

<dependency>
 <groupId>com.google.api-client</groupId>
 <artifactId>google-api-client</artifactId>
 <version>1.31.1</version>
</dependency>

所以,请记住这一点!


推荐阅读