公开AWS Cognito Ids是否安全?

时间:2016-09-22 22:34:48

标签: javascript security amazon-web-services amazon-cognito

我正在使用客户端Cognito Javascript SDK。部分设置需要配置region, UserPoolId, ClientId, and identityPoolId。在测试期间,我通过一个单独的文件包含数据,用户可以查看这些文件并用于发现这些Cognito ID。

将这些ID暴露给最终用户是否安全?

否则,我该如何安全地做到这一点?

3 个答案:

答案 0 :(得分:3)

AWS在他们的论坛上发布了一篇解决此问题的帖子。

  

请注意,使用userPoolId和clientId时,只能调用未经身份验证的API,例如:SignUp,authenticate,forgotPassword等。因此,仅用userPoolId和clientId就不足以在您的用户池上执行任何恶意活动。

来源为https://forums.aws.amazon.com/thread.jspa?threadID=245752&tstart=200

另一种方法是使用API​​ Gateway和Cognito授权程序来处理对其他后端服务(如DynamoDB或S3)的调用,而不是直接使用来自前端js的服务。这在这里描述:

https://aws.amazon.com/blogs/mobile/aws-mobile-app-backend-with-hybrid-apps/

答案 1 :(得分:0)

如果您使用经过身份验证的身份(当您使用Cognito用户池,那么它是经过身份验证的身份),那么即使攻击者获得了identityId,他们也无法获得AWS凭据而无需提供只能获取的ID令牌通过提供身份验证凭据(用户名和密码)。

P.S:始终建议使用经过身份验证的身份,即使您拥有未经身份验证的身份的用例,最好将访问权限保留在未经身份验证的身份角色中。

答案 2 :(得分:0)

我有一个解决方案,可以使用IAM非认证凭据来调用特定的lambda函数。这样的流程:

  1. 为未经身份验证的提供者创建认知身份池
  2. 将该认知身份池与未经身份验证的amr的IAM角色策略相关联
  3. 授予该IAM角色权限以调用lambda身份验证功能(登录,注册,忘记,确认等)

因此,在这里,客户端应用程序仅需要获取其未经身份验证的凭据身份即可调用lambda身份验证功能。我们将clientID和userPoolID存储在lambda上,而不存储在客户端应用程序上