无法使用服务帐户访问 Google REST Api

Posted

技术标签:

【中文标题】无法使用服务帐户访问 Google REST Api【英文标题】:Not able to access Google REST Api using Service Account 【发布时间】:2018-12-13 11:57:39 【问题描述】:

我需要使用 Http 客户端库使用服务帐户访问 Google's BigQuery REST Api Endpoints。 于是,我尝试了Using OAuth 2.0 for Server to Server Applications文章中提供的代码

它在下面的行中给了我编译错误。

算法.RSA256(null, privateKey)

代码如下:

GoogleCredential credential = GoogleCredential
            .fromStream(new FileInputStream("service_account.json"));

    PrivateKey privateKey = credential.getServiceAccountPrivateKey();
    String privateKeyId = credential.getServiceAccountPrivateKeyId();

    try 

        Algorithm algorithm = Algorithm.RSA256(null, privateKey);

        String signedJwt = JWT.create().withKeyId(privateKeyId)
                .withIssuer("123456-compute@developer.gserviceaccount.com")
                .withSubject("123456-compute@developer.gserviceaccount.com")
                .withAudience("https://firestore.googleapis.com/google.firestore.v1beta1.Firestore")
                .withIssuedAt(new Date(now)).withExpiresAt(new Date(now + 3600 * 1000L)).sign(algorithm);
     catch (Exception e) 
        e.printStackTrace();
    

注意: Algorithm.RSA256() 接受 java.security.interfaces.RSAPrivateKey 而 Google Api 返回 java.security.PrivateKey

有人可以帮我吗?

【问题讨论】:

这可能对developers.google.com/api-client-library/java/…有帮助 【参考方案1】:

我对实现的发现:RSAPrivateKey 继承自 PrivateKey,所以如果你转换它(可能先进行类型检查),那么你应该很高兴!

【讨论】:

以上是关于无法使用服务帐户访问 Google REST Api的主要内容,如果未能解决你的问题,请参考以下文章

无法访问通过 Google 电子表格 API 通过服务帐户创建的工作表

Google云端硬盘访问 - 服务帐户或OAuth - 读取/写入用户文件

使用 REST API 向 Google Cloud Platform 上的服务帐户添加角色

无法使用服务帐户订阅 google pub 子主题

YouTube API - 使用 Google 管理员帐户访问多个 youtube 频道(品牌帐户)

如何通过服务帐户通过 Google BigQuery External Table 访问 Google Sheets Doc