来自AWS文档(Specifying User Pool App Settings):
开发人员有责任保护任何应用客户端ID或 秘密,以便只有授权的客户端应用程序可以调用这些 未经认证的API。
在安全条件下是否有任何架构可以进行身份验证(不会在静态Web中公开客户端ID)。
AWS samples将客户端ID清除,因此无法满足文档建议。此外,任何攻击者都可以使用静态Web客户端ID对Cognito未授权的api执行暴力攻击。有什么方法可以避免这种情况吗?
答案 0 :(得分:2)
当您同时使用App Client ID和Secret(通常在移动开发中)时,他们的建议适用。
创建应用时,您可以选择创建一个秘密 对于那个应用程序如果为应用程序创建了秘密,则秘密必须是 提供使用该应用程序。基于浏览器的应用程序 JavaScript可能不需要带有秘密的应用程序。
在网络上使用Cognito时,无需生成密钥(在用户池中创建应用程序时取消选中该框)。这确实在客户端上以明文形式留下了App Client Id,但这种情况没有比将登录页面暴露给开放互联网的风险更大的风险:攻击者可能会试图强行登录,无论如何。
我确信亚马逊在这种情况下做的事情(人们在自定义登录实施的情况下应该做的事情)是防御限制请求,将IP列入黑名单等,这实质上减慢了攻击者的速度执行蛮力攻击是不可行或不值得的。
简而言之,您无需担心将App Client ID嵌入Web前端代码中。
希望这有帮助!
答案 1 :(得分:0)
阐明该主题。客户机密是来自OAuth2 here的概念:
如果开发人员正在创建“公共”应用程序(移动或单页应用程序),则您根本不应向该应用程序发布client_secret。这是确保开发人员不会在应用程序中意外添加它的唯一方法。如果不存在,就不会泄漏!
Client Secret
仅在构建网络服务器应用程序或不面向公众的应用程序时使用。