使用亚马逊Cognito未经验证的身份池ID是否允许在Android应用程序之外访问我的dynamodb?

使用亚马逊Cognito未经验证的身份池ID是否允许在Android应用程序之外访问我的dynamodb?,android,amazon-dynamodb,amazon-cognito,Android,Amazon Dynamodb,Amazon Cognito,基本上,我希望我的应用程序用户只能通过应用程序访问我的DynamoDB表。目前,我有一个未经验证的身份池使用亚马逊Cognito,因为该应用程序将不需要用户登录 我已经在我的应用程序中硬编码了身份池id(由Amazon Cognito提供),这样我就可以对我的DynamoDB表进行读取调用。那么,是否有人可以对我的应用程序进行反编译并获取此身份池id,从而在我的应用程序之外对我的数据库进行读取调用?如果是这样的话,有没有一种方法可以设置为只有通过应用程序才能访问DynamoDB(而不暴露任何敏感

基本上,我希望我的应用程序用户只能通过应用程序访问我的DynamoDB表。目前,我有一个未经验证的身份池使用亚马逊Cognito,因为该应用程序将不需要用户登录

我已经在我的应用程序中硬编码了身份池id(由Amazon Cognito提供),这样我就可以对我的DynamoDB表进行读取调用。那么,是否有人可以对我的应用程序进行反编译并获取此身份池id,从而在我的应用程序之外对我的数据库进行读取调用?如果是这样的话,有没有一种方法可以设置为只有通过应用程序才能访问DynamoDB(而不暴露任何敏感的凭据信息)

我已经阅读了有关Amazon Cognito身份池的文档,但还没有看到对这种情况的解释

那么,是否有人可以反编译我的应用程序并获取此身份池id

嗯,是的,这是可能的

无需付出很大努力,您最好使用模糊处理(例如使用Proguard)。它不会修改您的API密钥,但会扰乱您的代码,使其无法为人类阅读

模糊处理:缩短类和成员的名称,从而减少DEX文件的大小。要了解更多信息,请转到关于的部分

指:

在软件开发中,混淆是故意创建人类难以理解的源代码或机器代码的行为。与自然语言中的混淆一样,它可能会使用不必要的迂回表达式来编写语句。程序员可能会故意混淆代码以隐藏其目的(通过模糊性实现安全性)或其逻辑或嵌入其中的隐式值,主要是为了防止篡改、阻止逆向工程

因此,一般来说,您不能在最终结果APK中隐藏API键并确保不会找到它

有一些工具可以反编译APK并搜索任何看起来像API密钥的东西

我只能想到一个可以提供更多安全性的解决方案:只提供在身份验证时授予的用户凭据。使用这些凭据,用户将从您的服务器请求数据,而您的服务器将从您引用的DynamoDB请求数据。您不能撤销API密钥而不产生后果,但您可以通过撤销用户授权令牌等方式限制用户或设备访问(取决于实现)