在静态Web中安装AWS Cognito用户池客户端ID

时间:2016-12-22 07:36:35

标签: security amazon-web-services angular aws-cognito

来自AWS文档(Specifying User Pool App Settings):

  

开发人员有责任保护任何应用客户端ID或   秘密,以便只有授权的客户端应用程序可以调用这些   未经认证的API。

在安全条件下是否有任何架构可以进行身份​​验证(不会在静态Web中公开客户端ID)。

AWS samples将客户端ID清除,因此无法满足文档建议。此外,任何攻击者都可以使用静态Web客户端ID对Cognito未授权的api执行暴力攻击。有什么方法可以避免这种情况吗?

2 个答案:

答案 0 :(得分:2)

当您同时使用App Client ID和Secret(通常在移动开发中)时,他们的建议适用。

  

创建应用时,您可以选择创建一个秘密   对于那个应用程序如果为应用程序创建了秘密,则秘密必须是   提供使用该应用程序。基于浏览器的应用程序   JavaScript可能不需要带有秘密的应用程序。

在网络上使用Cognito时,无需生成密钥(在用户池中创建应用程序时取消选中该框)。这确实在客户端上以明文形式留下了App Client Id,但这种情况没有比将登录页面暴露给开放互联网的风险更大的风险:攻击者可能会试图强行登录,无论如何。

我确信亚马逊在这种情况下做的事情(人们在自定义登录实施的情况下应该做的事情)是防御限制请求,将IP列入黑名单等,这实质上减慢了攻击者的速度执行蛮力攻击是不可行或不值得的。

简而言之,您无需担心将App Client ID嵌入Web前端代码中。

希望这有帮助!

答案 1 :(得分:0)

阐明该主题。客户机密是来自OAuth2 here的概念:

  

如果开发人员正在创建“公共”应用程序(移动或单页应用程序),则您根本不应向该应用程序发布client_secret。这是确保开发人员不会在应用程序中意外添加它的唯一方法。如果不存在,就不会泄漏!

Client Secret仅在构建网络服务器应用程序或不面向公众的应用程序时使用。