Oauth “如何更改谷歌API”;服务帐户“;姓名/电邮地址

Oauth “如何更改谷歌API”;服务帐户“;姓名/电邮地址,oauth,google-api,google-oauth,google-api-client,google-developers-console,Oauth,Google Api,Google Oauth,Google Api Client,Google Developers Console,我正在使用GoogleAPI在GoogleDrive上创建一个电子表格 我的应用程序有一个链接,上面写着“下载到谷歌文档” 该应用程序向谷歌文档发送一个文件,并与用户共享 用户可以在谷歌文档中看到它 这一切都很好 问题是共享文档的服务帐户的标识。 这是一个生成的id。我希望它被标记到我的应用程序中 这可能吗? - 您不能更改服务帐户的电子邮件地址,也不能为其提供真实的用户名。该电子邮件地址由谷歌在中创建 更改电子邮件地址的唯一方法是删除它并创建一个新的电子邮件地址,但同样,你会被谷歌创建的

我正在使用GoogleAPI在GoogleDrive上创建一个电子表格

  • 我的应用程序有一个链接,上面写着“下载到谷歌文档”
  • 该应用程序向谷歌文档发送一个文件,并与用户共享
  • 用户可以在谷歌文档中看到它
这一切都很好

问题是共享文档的服务帐户的标识。 这是一个生成的id。我希望它被标记到我的应用程序中

这可能吗? -


您不能更改服务帐户的电子邮件地址,也不能为其提供真实的用户名。该电子邮件地址由谷歌在中创建

更改电子邮件地址的唯一方法是删除它并创建一个新的电子邮件地址,但同样,你会被谷歌创建的电子邮件地址卡住。我怀疑客户id和电子邮件地址是用于识别您的应用程序的一对。类似于客户端id和客户端机密,但我无法验证


我明白你的意思。如果我们可以的话,那就太好了。

谷歌服务帐户确实允许你模拟现有的用户帐户(对于某些服务)。我没有在GoogleDrive上测试过它,但我已经在WebmasterToolsAPI中使用过它。可在此处找到说明:

总之,在创建服务帐户凭据时,您可以使用“应用程序请求授权访问的用户的电子邮件地址”指定“sub”参数。您请求访问的帐户必须存在,并且具有访问您请求的服务的权限

在上面的链接中,Google提供了Java、Python和HTTP/REST的示例,下面是Python示例:

credentials = SignedJwtAssertionCredentials(client_email, private_key,
'https://www.googleapis.com/auth/sqlservice.admin',
sub='user@example.org')
我使用的是Ruby google api客户端gem(0.9.pre3),ServiceAccountCredentials构造函数不会将“sub”参数传递给其父类,因此必须在另一个步骤中指定它:

client = Google::Auth::ServiceAccountCredentials.new(json_key_io: json_key_io, scope: scope)
client.update!(sub: 'user@example.org')
client.fetch_access_token!
service = Google::Apis::WebmastersV3::WebmastersService.new
service.authorization = client 

使用此代码,我可以使用我的服务帐户进行身份验证,并且我可以访问网站

您使用的API是否与google帐户中的项目相关?那么id和项目之间有什么共同点吗?你不能改变它,服务帐户的电子邮件地址是由谷歌创建的,你必须遵守它。不,你也不能提供你自己的,它必须是由谷歌生成的。@DaImTo把这个评论作为答案,我会给你一张支票!我按照此操作得到了一个错误:
google.auth.exceptions.RefreshError:('invalid\u grant:invalid email或User ID','{\n“error”:“invalid\u grant”,\n“error\u description”:“invalid email或User ID”\n}')