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

问题描述 投票:8回答:2

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

开发人员有责任保护任何应用客户端ID或机密,以便只有经过授权的客户端应用才能调用这些未经身份验证的API。

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

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

security amazon-web-services angular aws-cognito
2个回答
2
投票

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

创建应用程序时,您可以选择为该应用程序创建机密。如果为应用程序创建了密钥,则必须提供秘密才能使用该应用程序。使用JavaScript编写的基于浏览器的应用程序可能不需要具有秘密的应用程序。

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

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

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

希望这可以帮助!


0
投票

为了解释这个话题。 Client Secret是来自OAuth2 here的概念:

如果开发人员正在创建“公共”应用程序(移动或单页应用程序),那么您根本不应该向应用程序发出client_secret。这是确保开发人员不会意外地将其包含在应用程序中的唯一方法。如果它不存在,它就不会泄露!

只有在构建Web服务器应用程序或不面向公众的应用程序时,才应使用Client Secret

© www.soinside.com 2019 - 2024. All rights reserved.