谷歌云存储是否可以公开API密钥?

时间:2014-11-20 02:08:00

标签: upload google-cloud-storage google-cloud-platform

我正在开发一个允许用户上传图片的应用程序。我想使用Google云服务来存储这些图片。我正在为数据库中的每个图像创建一个唯一的GUID,并希望将图像存储在具有该名称的云中。我有必要为GUID发出ajax请求,然后将图像从同一页面直接上传到谷歌云服务。

https://github.com/GoogleCloudPlatform/storage-getting-started-javascript/blob/master/index.html

如本例所示。

我的第一个问题是,我应该将它发送到我的后端(C#代码)并从那里上传吗?或者这是正确的方法吗?

我的第二个问题,如果这是正确的方法是,不会在javascript中公开我的详细信息允许其他人从我的应用程序外部上传吗?

1 个答案:

答案 0 :(得分:3)

API密钥本身将呼叫标识为与某个项目相关联以进行计费。这只是匿名电话的必要条件。 API密钥授予任何类型的授权。如果项目中存在一个只有项目成员可以看到的对象,则API密钥不会授予任何人阅读权限。

也就是说,如果你能帮助它,分享你的API密钥并不是一个好主意,如果你需要分享它,你应该尽可能地锁定它。 API密钥可以限制为仅与某些IP地址一起使用,仅限于某些Web引用(例如,它仅适用于www.yoursite.com上的JavaScript客户端),或仅在从特定iPhone或Android应用程序运行时使用。这些预防措施在加密方面并不是万无一失的(黑客没有理由不会欺骗引用者标题),但是对于那些只想粘贴API的人来说,它们确实无用了在某个地方启用网络应用程序,并且不想自己付费。

对您的应用程序使用javascript客户端方法的问题是,个人用户最终会匿名上传对象或使用自己的Google帐户上传对象。两者都不是超级棒,因为匿名选项基本上要求你创建一个启用了匿名写入的存储桶,而你不想这样做。

有一种让用户上传图片的好方法:签名网址。签名URL允许您的服务器提前安全地签署使用您的凭据上传对象的请求。这是让匿名最终用户安全地将对象上传到您的存储桶的最佳选择。

有关已签名网址的文档:https://cloud.google.com/storage/docs/accesscontrol#Signed-URLs