来自AWS文档(Specifying User Pool App Settings):
开发人员有责任保护任何应用客户端ID或机密,以便只有经过授权的客户端应用才能调用这些未经身份验证的API .
那么在安全条件下是否有任何架构可以进行身份验证(不会在静态Web中清除客户端ID) .
AWS samples将客户端ID清除,因此不符合文档建议 . 此外,任何攻击者都可以使用静态Web客户端ID对Cognito未授权的api执行暴力攻击 . 有什么方法可以避免这种情况吗?
来自AWS文档(Specifying User Pool App Settings):
开发人员有责任保护任何应用客户端ID或机密,以便只有经过授权的客户端应用才能调用这些未经身份验证的API .
那么在安全条件下是否有任何架构可以进行身份验证(不会在静态Web中清除客户端ID) .
AWS samples将客户端ID清除,因此不符合文档建议 . 此外,任何攻击者都可以使用静态Web客户端ID对Cognito未授权的api执行暴力攻击 . 有什么方法可以避免这种情况吗?
2 回答
当您同时使用App Client ID和Secret(通常在移动开发中)时,他们的建议适用 .
在Web上使用Cognito时,无需生成机密(在用户池中创建应用程序时取消选中该框) . 这确实在客户端上以明文形式留下了App Client Id,但是这个场景没有比将登录页面暴露给开放互联网所带来的额外风险:攻击者可能会试图强行登录,无论如何 .
我确信亚马逊在这种情况下所做的事情(人们应该在自定义登录实施的情况下应该做的事情)是防范限制请求,将IP列入黑名单等,这实质上会使攻击者减速到不可行的程度或不值得它进行暴力攻击 .
简而言之,您无需担心将App Client Id嵌入Web前端代码中 .
希望这可以帮助!
为了解释这个话题 . Client Secret是一个来自OAuth2 here的概念:
只有在构建Web服务器应用程序或不面向公众的应用程序时,才应使用
Client Secret
.