我正在使用 Google API 在 Google Drive 上创建电子表格。
- 我的应用有一个链接,上面写着“下载到 Google Doc”
- 该应用程序将文件发送到谷歌文档并与用户共享。
- 然后用户可以在谷歌文档中看到它。
这一切都很好。
问题是共享文档的服务帐户的身份。它是一个生成的 id。我希望它被标记到我的应用程序中。
这可能吗?-
我正在使用 Google API 在 Google Drive 上创建电子表格。
这一切都很好。
问题是共享文档的服务帐户的身份。它是一个生成的 id。我希望它被标记到我的应用程序中。
这可能吗?-
您不能更改服务帐户电子邮件地址,也不能为其提供真实的用户名。服务帐户电子邮件地址由 Google 在Google Developer 控制台中创建。
更改电子邮件地址的唯一方法是删除它并创建一个新地址,但您将再次被 Google 创建的那个卡住。我怀疑客户 ID 和电子邮件地址是用于识别您的应用程序的一对。类似于客户端 ID 和客户端密码,但我无法验证。
我确实明白你的意思,如果我们可以的话,那就太好了。
Google 服务帐户确实允许您模拟现有用户帐户(对于某些服务)。我没有在 Google Drive 上测试过它,但我已经将它与 Webmaster tools API 一起使用。可以在此处找到说明:https ://developers.google.com/identity/protocols/OAuth2ServiceAccount
总而言之,在创建服务帐户凭据时,您可以使用“应用程序为其请求委派访问的用户的电子邮件地址”指定“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-client 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
使用此代码,我可以使用我的服务帐户进行身份验证,并且我可以访问这些站点