0

我正在用AWS Cognito,Lambda,S3和其他十几种服务构建一个无服务器的网站。我的登录页面中的HTML/JS具有认证池ID。这有多安全?我知道隐藏敏感内容是最好的做法。但这不是客户端服务器。它的所有客户,如果我诚实。我确实通过lambda调用访问了一些敏感数据。但即使这个调用需要一些明文敏感的输入,例如用户ID。在我的html中显示AWS认知池ID是否安全?

<script src="https://sdk.amazonaws.com/js/aws-sdk-2.3.7.min.js"> </script> 
    <script> 
    AWS.config.region = 'XX-XXXX-1'; 
    AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 
    IdentityPoolId: 'XX-XXXX-1:XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX' 
    }); 
    var lambda = new AWS.Lambda(); 
    </script> 

我真的不喜欢poolID可见。攻击者可以复制此内容,并强制执行我的认证ID。任何想法隐藏它?

回答

2

使用身份池ID来创建客户端是一个需求,并保持它的客户端是非常普遍的。它本身并不是一个主要的风险,并且在你身边有一些修补可能会大大受到限制。

可以减轻经由Cognito创建并链接到池中的角色暴露身份池ID的风险。通过这些,您可以缩小Cognito为未经身份验证/通过身份验证的用户生成的凭据。 This blog post有更多关于如何做到这一点。您可以更进一步,通过大大限制未经身份验证的用户的特权,直到他们登录到身份验证身份。

0

我也有同样的担忧,并计划用户PHP或node.js中保持cognito池ID和客户端ID在服务器端(EC2例如)。然而,当我发现亚马逊改变了主意并且没有包含Cognito User Pools客户端SDK支持时,我感到沮丧。 Has anyone connected to a user pool from a lambda written in Node

希望这将包括在未来的版本。

我怀疑这同样适用于php。

另一种方法是使用其中一个javaScript混淆器作为这一个: javascriptObfuscator在列表隐藏键或标识只是看页面源。

+0

Cognito用户池是绝对支持的SDK核心的Android,iOS和JavaScript的软件开发工具包之外,什么被你链接的帖子的意思是,那些软件开发工具包有更多的帮手,让生活容易一点,而其他SDK则不会。您可以使用大多数SDK中包含的直接API来连接并使用用户池,而无需使用移动SDK便捷方法。 虽然这张海报并未提及Cognito用户池,但Cognito联合身份。 –

0

你可以把游泳池等Cognito中的ID HTML没有太多的担心(如果您精心定义的未经授权的政策),但您可能需要使用API​​网关(带内置Cognito授权)用于处理呼叫到其他后端服务(如DynamoDB或S3),而不是直接从前端js使用这些服务。这是这里描述:

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

相关问题