【发布时间】:2018-08-13 21:58:13
【问题描述】:
我已经构建了一个 iOS 和一个 Android 应用程序。这些应用程序使用 Cognito 用户池来允许公开身份验证和未经身份验证的 API 网关访问。
我正在尝试阻止第三方应用访问此 API。我只想要我已授权具有 API 访问权限的应用程序。是否可以将 APIG 的访问权限仅限于我的应用程序?
Cognito 在用户池的设置中提供了 App Client ID 和 App Client Secret 的概念。这是将 Cognito 登录限制为白名单客户端/应用程序的首选机制吗? docs 几乎没有说明此配置的目的或在野外保持这些密钥安全的最佳实践。
是否有其他方法可以实现我正在尝试的目标?这个目标甚至有可能实现吗?我相信应用可以针对这些密钥进行逆向工程,或者可以通过网络嗅探器发现它们。
我在 API 安全方面有点新手,因此非常感谢您的见解。
【问题讨论】:
-
我目前的工作在登录后生成一个JWT令牌。所以所有数据都是动态的。当然,如果你获得了用户/通行证,你就进去了。然后我使用 API Gateway Autorizers,它对每个请求进行 lambda 调用(也有缓存)。如果这验证了(在我的情况下)JTW,则允许方法通过。不确定这是否真的可以帮助你。
-
您是否为此使用 Cognito?我认为限制需要发生在 Cognito 级别。只有某些应用程序必须被允许接收登录令牌,然后控制 APIG 访问。我希望我的解释是正确的。
-
我只玩过几次 Cognito。如果我发现了什么,我会告诉你的。
-
如果我对您的理解正确,您在 API 网关上对您的 API 进行了经过身份验证的访问和未经身份验证的访问,并且您只想限制对您的应用的未经身份验证的访问。这样做的一种方法是将
API keys用于 API 网关,尽管它的目的不是用于身份验证。这些API keys本质上是静态的,您必须实现自己的系统来轮换这些密钥。首选方法是使用identity federation和user pools来访问您的 API 网关。如果这是您要查找的内容,我可以添加更多详细信息。 -
谢谢@ASR,请让我澄清一下。我想限制对我的“官方”应用程序的 API 访问,以便只有这个应用程序(iOS 和 Android 版本)可以连接。这将涵盖经过身份验证或未经身份验证的角色。我认为这需要在 Cognito 层处理,以某种方式只允许某些 API 密钥或应用程序客户端通过。我目前正在使用用户池进行身份验证。目标是防止任何未经批准的应用程序连接到 API。如果您能提供任何额外的实施细节,我们将不胜感激。
标签: aws-api-gateway amazon-cognito aws-cognito