标签: service-accounts

无法通过HTTP/REST错误访问FireBase数据库403禁止访问

用于服务器+ Xcode 8.1的Swift + Vapor框架

我正在尝试阅读Firebase实时数据库向我的数据库发出HTTP请求,但我得到了许可被拒绝.

以下是这些步骤:
1.使用从"console.developers.google.com"下载的密钥创建JWT签名
2.将POST请求发送到OAuth2服务器并获取访问令牌
3.将GET请求发送到firebase数据库,并从中接收访问令牌OAuth2服务器.

我得到"权限被拒绝",HTTP/1.1 403禁止

// the header of the JSON Web Token (first part of the JWT)
let headerJWT = ["alg":"RS256","typ":"JWT"]

// the claim set of the JSON Web Token
let jwtClaimSet =
  ["iss":"firebase-adminsdk-kxx5h@fir-30c9e.iam.gserviceaccount.com",
 "scope":"https://www.googleapis.com/auth/firebase.database", //is this the correct API to access firebase database?
 "aud":"https://www.googleapis.com/oauth2/v4/token",
 "exp": expDate,
 "iat": iatDate]


drop.get("access") { request in
var accesstoken = "ya29.ElqhA-....XXXX"

 let responseFirebase = try drop.client.get("https://fir- 30c9e.firebaseio.com/data/Users.json",
  headers: ["Authorization":"Bearer \(accesstoken)"], 
     query: [:])

print("FirebaseResponse_is \(responseFirebase)")
return "success" …
Run Code Online (Sandbox Code Playgroud)

firebase service-accounts firebase-realtime-database vapor

13
推荐指数
2
解决办法
8239
查看次数

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

我想创建使用Python脚本调用REST API GCP服务帐户,然后赋予它特定的角色-理想一些的这些,比如roles/logging.logWriter

首先,我请求创建一个工作正常的帐户,我可以在控制台/IAM 中看到该帐户。
其次,我想给它这个角色,似乎是正确的方法。但是,它不接受roles/logging.logWriter,说 HttpError 400,"Role roles/logging.logWriter is not supported for this resource.">
相反,如果我在控制台中设置了所需的策略,然后尝试该getIamPolicy方法(使用 gcloud 工具),我得到的只是 response etag: ACAB,没有提及我设置的实际角色。因此我认为这些角色指的是不同的东西。

知道如何使用 API 为服务帐户编写角色/范围的脚本吗?

rest amazon-iam service-accounts google-cloud-platform

13
推荐指数
2
解决办法
1万
查看次数

我们可以使用服务帐户访问GMAIL API吗?

我有一个桌面应用程序,通过REST接口使用GMAIL API读取邮件.我想使用服务帐户,以便我们可以使用域设置下载邮件,用户交互为空.我已成功创建Gmail服务实例,但当我尝试访问任何Gmail API方法(如提取邮件列表或其他任何内容)时,我会收到例外说法

Google.Apis.Auth.OAuth2.Responses.TokenResponseException:错误:"access_denied",说明:"请求的客户端未经授权."

我完成了开发人员控制台的所有设置,并将范围添加到我的gapps域.

Gmail API是否支持服务帐户?使用相同的设置和服务帐户,我可以使用云服务和API获取Google云端硬盘中所有文件的列表.

c# google-oauth service-accounts gmail-api

12
推荐指数
2
解决办法
2万
查看次数

GCP:如何向 Firestore 集合上的服务帐户授予角色?

我们可以与服务帐户共享 BigQuery 数据集,我们可以通过为服务帐户分配特定角色来将服务帐户作为成员添加到特定存储桶......使用图形界面。

火力商店怎么样?我们可以与服务帐户共享特定的集合吗?我在网络界面中找不到任何这样的选项..

备注:我无权向服务帐户授予全局权限,但我有权向资源添加成员并授予他们对该特定资源的角色。

谢谢你!

service-accounts firebase-security google-iam google-cloud-firestore

12
推荐指数
1
解决办法
1万
查看次数

GCP - 将服务帐户模拟为用户

我想允许用户模拟服务帐户来对长时间运行的进程执行操作。但是,所有代码示例都说明了一个服务帐户模拟另一个服务帐户。

用户可以直接冒充服务帐号吗?如果是这样,怎么办?

我正在遵循这个示例代码

初始化一个无权访问列表桶的源凭证:

from google.oauth2 import service_acccount

target_scopes = [
    'https://www.googleapis.com/auth/devstorage.read_only']

source_credentials = (
    service_account.Credentials.from_service_account_file(
        '/path/to/svc_account.json',
        scopes=target_scopes))
Run Code Online (Sandbox Code Playgroud)

现在使用源凭据来获取凭据以模拟另一个服务帐户:

from google.auth import impersonated_credentials

target_credentials = impersonated_credentials.Credentials(
  source_credentials=source_credentials,
  target_principal='impersonated-account@_project_.iam.gserviceaccount.com',
  target_scopes = target_scopes,
  lifetime=500)
Run Code Online (Sandbox Code Playgroud)

impersonation service-accounts google-cloud-platform google-iam google-cloud-iam

12
推荐指数
2
解决办法
2万
查看次数

服务帐户可以调用Google Apps脚本执行API吗?

我想使用服务帐户通过Apps脚本执行API访问Google表格,但是文档中是否支持这一点并不清楚.

我尝试过的步骤(导致Execution API的403状态)是:

  1. 创建一个新的(未绑定的)Apps脚本
  2. 访问链接的Developer Console项目
  3. 启用Execution API
  4. 在同一个项目中创建一个新的服务帐户(下载生成的JSON文件)
  5. 创建一个新的Google表格并与服务帐户的电子邮件地址共享(这是我最不确定的步骤)
  6. 编写一个从电子表格中读取的应用程序脚本函数
  7. 从脚本编辑器手动运行脚本(正确设置脚本的范围)
  8. 发布脚本("部署为API可执行文件"),使"任何人"都可以访问该脚本
  9. 使用服务帐户和链接到脚本的范围提示新的OAuth2令牌(在我们的示例中只是' https://www.googleapis.com/auth/spreadsheets ')
  10. 尝试使用令牌调用Execution API

这是我得到的回应:

{
  "error": {
    "code": 403,
    "message": "The caller does not have permission",
    "status": "PERMISSION_DENIED"
  }
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为服务帐户永远无法访问Execution API吗?或者上面的步骤有问题吗?

google-apps-script service-accounts execution-api

11
推荐指数
3
解决办法
5296
查看次数

Google Drive API,Oauth和服务帐户

我在使用Google Drive API,服务帐户和身份验证时遇到了一些问题.我读了很多,但我无法弄清楚如何解决这个问题.

上下文:我的云端硬盘帐户上有一些文件(约35GB)和一个简单的网络应用程序,用户可以登录,查看我的驱动器中的一些选定的文件夹/文件,并在需要时下载它们.唯一可以直接访问我的云端硬盘帐户的是(或应该是)我的服务器,用户通过网络应用/服务器进行操作.

经过一番搜索,我找到了服务器到服务器的授权文档,这些文档应该是完美的,但我可以看到,服务帐户不共享相同的驱动器空间:它们有自己的,并且不可升级.由于这个(奇怪的)限制我不能使用服务帐户,因为我有超过35GB,我需要"分享"一切.

其他方式:使用"标准"OAuth以获取访问令牌,然后使用它来调用Drive API,但访问令牌有一个过期日期,我无法每次手动更新它.

所以,第一个问题:有没有办法增加服务帐户的配额?如果没有,是否有办法使用我的"普通"帐户(所有者)充当服务帐户?

第二个(虚拟)问题:我阅读了有关创建新OAuth凭据的文档,最后您获得了一些示例代码和"client-secret"JSON.我运行示例但我不明白该JSON文件的作用是什么:我必须登录并给予许可,我为什么需要它?

第三个(虚拟的)问题:如果OAuth是唯一的解决方案,是否有办法获取/刷新访问令牌而不是每次都手动执行?我查看了OAuth文档,"用户交互/确认"是auth流程中的基本内容之一,所以我认为不可能.

google-drive-api google-oauth service-accounts

11
推荐指数
2
解决办法
8748
查看次数

通过API v3允许Google服务帐户YouTube上传访问权限

我想在没有用户参与的情况下自动将视频上传到YouTube,所以我创建了一个服务帐户,跳过了箍,一切看起来很棒,然后尝试上传,一个块,并且我的代码遭到了这个Google_Exception异常的爆炸:

"无法启动可恢复上传(HTTP 401:youtube.header,Unauthorized)"

然后我在YouTube API v3上挖掘并找到错误信息:

https://developers.google.com/youtube/v3/docs/errors

"如果您尝试使用OAuth 2.0服务帐户流程,则会出现此错误.YouTube不支持服务帐户,如果您尝试使用服务帐户进行身份验证,则会收到此错误."

它是否正确?我无法使用服务帐户自动将视频上传到YouTube?

(这是浪费了几天努力工作!)

youtube-api service-accounts

10
推荐指数
1
解决办法
4953
查看次数

Google服务帐户用户干扰

如何使用普通的网络用户界面登录Google服务帐户,例如google drive

现在我只能使用脚本使用API​​登录.

oauth google-api google-drive-api google-oauth service-accounts

10
推荐指数
1
解决办法
3053
查看次数

无法使用Spark的GSC连接器连接Google存储文件

我在我的本地计算机上写了一个火花作业,它使用google hadoop连接器从谷歌云存储中读取文件,如gs://storage.googleapis.com/,https://cloud.google.com/dataproc/docs/中所述连接器/云的存储

我已经设置了具有计算引擎和存储权限的服务帐户.我的火花配置和代码是

SparkConf conf = new SparkConf();
conf.setAppName("SparkAPp").setMaster("local");
conf.set("google.cloud.auth.service.account.enable", "true");
conf.set("google.cloud.auth.service.account.email", "xxx-compute@developer.gserviceaccount.com");
conf.set("google.cloud.auth.service.account.keyfile", "/root/Documents/xxx-compute-e71ddbafd13e.p12");
conf.set("fs.gs.project.id", "xxx-990711");
conf.set("fs.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem");
conf.set("fs.AbstractFileSystem.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem"); 

SparkContext sparkContext = new SparkContext(conf);
JavaRDD<String> data = sparkContext.textFile("gs://storage.googleapis.com/xxx/xxx.txt", 0).toJavaRDD();
data.foreach(line -> System.out.println(line));
Run Code Online (Sandbox Code Playgroud)

我已经设置了名为GOOGLE_APPLICATION_CREDENTIALS的环境变量,该变量指向密钥文件.我尝试过使用两个密钥文件,即jsonP12.但无法访问该文件.我得到的错误是

java.net.UnknownHostException: metadata
java.io.IOException: Error getting access token from metadata server at: http://metadata/computeMetadata/v1/instance/service-accounts/default/token
        at com.google.cloud.hadoop.util.CredentialFactory.getCredentialFromMetadataServiceAccount(CredentialFactory.java:208)
        at com.google.cloud.hadoop.util.CredentialConfiguration.getCredential(CredentialConfiguration.java:70)
Run Code Online (Sandbox Code Playgroud)

我正在使用java 8,spark 2.2.0依赖项和gcs-connector 1.6.1.hadoop2从eclipse运行我的工作.我只需要使用服务帐户连接,而不是通过OAuth机制连接.

提前致谢

java google-cloud-storage service-accounts apache-spark google-cloud-dataproc

10
推荐指数
1
解决办法
931
查看次数