公开 AWS Cognito ID 是否安全?

Is it safe to expose the AWS Cognito Ids?

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

将这些 ID 公开给最终用户是否安全?

否则,我该如何安全地执行此操作?

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

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

AWS 在他们的论坛上 post 解决了这个问题。

Please note that with userPoolId and clientId, only unauthenticated APIs can be called, for eg: SignUp, authenticate, forgotPassword etc. So userPoolId and clientId alone are not enough to do any malicious activity on your user pool.

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

另一种方法是将 API 网关与 Cognito 授权方一起使用,以处理对其他后端服务(如 DynamoDB 或 S3)的调用,而不是直接使用来自前端 js 的调用。此处描述:

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

我有一个使用 IAM unauth 凭证调用特定 lambda 函数的解决方案。所以流程是这样的:

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

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