我正在使用客户端Cognito Javascript SDK。部分设置需要配置region, UserPoolId, ClientId, and identityPoolId
。在测试期间,我通过一个单独的文件包含数据,用户可以查看这些文件并用于发现这些Cognito ID。
将这些ID暴露给最终用户是否安全?
否则,我该如何安全地做到这一点?
答案 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函数。这样的流程:
因此,在这里,客户端应用程序仅需要获取其未经身份验证的凭据身份即可调用lambda身份验证功能。我们将clientID和userPoolID存储在lambda上,而不存储在客户端应用程序上