Android 在将文件上载/下载到AWS S3之前,通过web服务器验证

Android 在将文件上载/下载到AWS S3之前,通过web服务器验证,android,amazon-s3,restful-authentication,Android,Amazon S3,Restful Authentication,我想创建一个android应用程序,并使用AWS s3作为存储服务,允许用户上传和下载文件。我学习了一些关于S3REST服务的知识,在为Bucket等配置IAM角色之后,它可以帮助我实现同样的功能 现在的问题是,我希望只有我的应用程序的注册用户/在我的web服务器上配置了访问控制(用户名/密码)才允许上载/下载文件,而不允许只有应用程序访问权限的任何人 也可以查看下面的链接,了解使用REST的AWS S3上传文件 简单地说,除了上面链接中描述的内容外,我只需要以下问题的答案: 1) 如何只允许

我想创建一个android应用程序,并使用AWS s3作为存储服务,允许用户上传和下载文件。我学习了一些关于S3REST服务的知识,在为Bucket等配置IAM角色之后,它可以帮助我实现同样的功能

现在的问题是,我希望只有我的应用程序的注册用户/在我的web服务器上配置了访问控制(用户名/密码)才允许上载/下载文件,而不允许只有应用程序访问权限的任何人

也可以查看下面的链接,了解使用REST的AWS S3上传文件

简单地说,除了上面链接中描述的内容外,我只需要以下问题的答案:

1) 如何只允许注册用户
2) 在生产应用程序中硬编码AWS S3 secretKey等是否是一种良好做法。
3) 在我的应用程序中硬编码这些值是否会导致即使是我的应用程序的未注册用户也可以将文件上载/下载到aws s3?

所有的建议都是受欢迎的,如果它们解决了部分难题,因为我完全不知道答案

这将非常有帮助。。。, 提前感谢,

  • 当然,在代码中硬编码密钥不是最佳做法

  • 现在,如果您想区分授权用户和未授权用户,那么一个AW服务可以完成这项工作,更多的是AWS Cognito。您可以在aws文档中找到很多内容

  • Cognito的几件事:

  • 您拥有Amazon Cognito用户池,该用户池提供:

    • 注册和登录服务
    • 用于登录用户的内置可自定义web UI。 使用Facebook、Google进行社交登录,使用亚马逊登录,以及使用用户的SAML身份提供商进行登录 游泳池

    • 用户目录管理和用户配置文件。 安全功能,如多因素身份验证(MFA)、检查受损凭据、帐户接管 保护、电话和电子邮件验证

  • 您有Amazon Cognito标识池(联合标识),它提供:

    • Amazon Cognito用户池中的用户
    • 通过外部身份提供程序(如)进行身份验证的用户 Facebook、谷歌或基于SAML的身份提供商
    • 通过您自己的现有身份验证过程进行身份验证的用户

  • 这就是它在我的应用程序中的工作原理

  • 使用aws cognito要求用户注册/登录
  • 通过充当S3服务代理的api网关部署api
  • 对于api,在api网关中应用AWS cognito作为授权者
  • 然而,这对对象的大小有限制

    我尝试过的选项是使用签名URL,这是由后端应用程序在注册用户访问请求时抛出的。 我的实现包括以下内容 1.客户端使用带有lambda实现的api请求已签名的url 2.Lambda生成签名URL并传递响应。 3.创建签名URL时,密钥/id从参数存储(请参阅EC2参数存储)中使用,该参数存储由角色和密钥保护


    我想从您的用例中,EC2参数存储(而不是数据库)应该足以安全地保持分泌。

    尽管我考虑了您的答案,我只想知道您对以下方法的看法:将Bucket密钥存储在数据库中,如果我理解您的问题,请您的后端服务在验证用户身份后将其发送回您。您可以使用aws sdk,这样您就可以立即访问s3存储桶,并且不需要在代码中传递密钥。虽然如果您不想使用sdk(我推荐),并且您也不太关心项目的安全性,但是您可以很好地使用您的代码!