我正在使用 AWS S3 在我的 Android 应用程序中上传和存储内容。我在 java 文件中使用以下代码:
AmazonS3Client s3Client = new AmazonS3Client(
new BasicAWSCredentials("XYZ",
"ABC+wktN"));
但这似乎很容易检索(即使 apk 已签名!)。我尝试使用 progaurd,但这会导致某些移动设备上的应用程序崩溃(尤其是 AWS 部分)。
有什么方法可以在代码中隐藏凭据而不让任何人检索它?或者有人用过其他方法吗?一种选择是上传到中间服务器,然后服务器将其上传到 AWS S3,但那是一个额外的跃点。另一个是让应用程序通过 URL 调用从服务器获取凭据,而不是在移动设备上获取凭据,但如果黑客可以直接获取凭据,他也可以获取 URL 并获取 key 。
最佳答案
Amazon Cognito 可以帮助您解决问题。您可以使用它为您的应用程序提供临时的、有限权限的凭证。使用 Cognito
- 您没有在您的应用中嵌入长期存在的凭据
- 你可以retrieve temporary credentials from Cognito .如果凭据被拦截,它们的有效期最多为一小时(可配置)。
- 您可以将访问策略附加到凭据以限制凭据可以访问的资源。参见 Understanding Amazon Authentication Part 3 Roles and Policies .
- Cognito 支持与 3rd party identity providers 集成例如 Facebook、Login with Amazon 等。您可以强制客户在访问您的资源之前进行身份验证
- Cognito 还支持 developer authenticated identity ,以便您可以构建自己的后端来验证客户。
您可以在他们的博客中找到更多信息 http://mobile.awsblog.com/blog/tag/amazon-cognito和开发人员指南 http://docs.aws.amazon.com/cognito/devguide/identity/ .
关于android - 如何在 Android 中使用 AWS S3 凭据上传内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30657583/