0

在我的研究中,我遇到了许多不同的来源,但不知何故我看不到,哪一方正在生成私有 API 密钥,另一方是如何获得它的。

许多人推荐 Amazon S3 Restful API 作为角色模型,因此如果我理解这一点,我可以为自己的目的创建类似的东西。

亚马逊的 S3 REST API。

例如,这里的这个例子很好地解释了这个过程,但是它没有解释,哪一方正在生成 API 密钥?那么在用户注册时,是服务端生成私有 API 密钥并将其分配给数据库中的用户 ID 吗?

如果是这种情况,客户端需要知道 API 密钥才能为每个请求创建签名,以便服务可以实际验证它。那么双方如何获取私有 API 密钥呢?

在我的情况下,我将有一个 iPhone 应用程序和一个 AngularJS Web 应用程序作为我的客户与 RESTful API 服务交谈。

非常感谢,

4

1 回答 1

-1

首先,您不想将密钥交给您的客户。一般来说,这是一场安全噩梦。(此外,密钥创建可能需要几个小时才能传播。并且您必须管理每个密钥的权限等。)因此所有签名都由您的服务器完成,并且您的密钥不会离开您的服务器。

您希望您的服务器拥有 S3 密钥,但只返回签名链接,这些链接将使客户端有权执行某些操作(获取特定文件或 PUT 文件)。这有点像母亲节游戏:客户端要求您提供“S3 签名链接”,然后它可以与 S3 对话以做一件事。由于您的服务器正在做一些微不足道的工作(检查请求被授权,然后返回签名的 URL),您将能够很好地扩展。

对于某些事情,例如“列出文件”或“删除文件”,您的服务器最好调用 S3(即在来自客户端的 Web 请求中向 S3 发出 Web 请求)并将结果返回给客户端(而不是弄乱签名链接)。但是如果你这样做,你可能会在扩展时遇到问题——除非你使用了正确的技术。(即你想要一个像 node.js 这样的事件服务器)

请注意,对于 PUT 请求,签名链接必须提前指定很多内容(如文件类型等)。您必须仔细阅读 AWS 规范。

小心混淆代理问题。您的代码将拥有一个可以查看所有用户文件的密钥,因此您负责用户之间的安全。

于 2013-05-18T20:02:30.797 回答