如果我正在使用AWS Amplify & DynamoDB和Angular web应用程序,我如何限制对我的放大资源的访问,使它们不能从我的Angular应用程序外部访问?
主要的漏洞似乎是我的Amplify配置暴露在Angular代码中。我想消除恶意开发人员采取此配置的能力,并开发一些机器人或黑客应用程序。
发布于 2021-02-01 07:27:36
正在回复下面的响应。这个问题仍然完全没有答案。如果您不能理解Amplify是如何在客户端上配置的,那么您似乎还没有使用过Amplify。
您创建一个amplify配置,然后在您的客户端实例化Amplify,即使您使用.env或任何其他客户端密钥管理,您的process.env仍将被公开。
这意味着任何流氓开发人员都可以获取您的User Pool ID、Identity Pool ID和region,并重新创建Amplify实例。
这是一个实际的问题。
发布于 2020-04-11 06:27:27
这是一个相当宽泛的问题(我对它对于Stack Overflow是否太宽持观望态度)。但这里是这样的:
保护您的(私有)资源将要求您的网站具有身份验证(authN),可能还需要授权(authZ)。Check out this explanation of these concepts
简而言之,身份验证是验证用户身份的过程,而授权是验证用户有权访问哪些内容的过程。
我说您可能需要authZ,因为在允许所有用户执行所有操作的情况下,您可以在authN步骤中同时执行这两项操作。
使用Amplify实现这一点的最常见模式是使用Cognito。Cognito有两个主要部分:
Cognito用户池:处理authN。它们是用户身份的存储库,Amplify使用它们来获取身份验证令牌。他们可以将他们真正的身份验证工作外包给第三方身份提供商,如Google或Facebook。
Cognito身份池:处理authZ。它们是从用户身份(捆绑在一个用户池中)到IAM凭证的映射。
如果您使用API Gateway,则不需要Cognito ID池,它可以直接从身份验证令牌提供authZ。
主要的漏洞似乎是我的放大配置在Angular代码中暴露
这是web开发的一个基本部分。您的前端必须始终知道要使用哪些端点进行身份验证和授权。这里的诀窍是,只有当用户拥有进行身份验证的凭据时,端点才有用。这正是web上每个登录页面的行为:任何人都可以尝试登录到任何公共登录页面。但是,如果您作为用户没有凭据,端点将拒绝对您进行身份验证。
在其他配置方面,如果您真的想这样做,可以等到authN/authZ之后,为前端提供在哪里可以找到资源的信息,比如Dynamo。但这可能有些夸大其词;您应该仔细权衡您的偏执程度,以确定是否值得隐藏未经授权的用户无法访问的后端资源的身份。
响应评论进行编辑:
开发人员不能通过我的应用程序创建一个帐户,在他们自己的应用程序中使用我的放大配置,使用他们通过我的应用程序创建的帐户进行身份验证,然后自由使用我的放大资源吗?
是啊!一种更简单的方法是向您的应用程序进行身份验证,获取结果凭据,并直接通过控制台使用它们来手动执行操作。但是,这也是客户端-服务器交互的一个基本限制:您提供给前端的任何内容(包括凭据)都可以以前端想要的任何方式使用,因为您无法控制前端。解决方法是限制授予用户在后端上的权限:严格限制凭据授权用户执行的操作。
考虑这一点的另一种方式是,即使您可以阻止用户在您的特定前端页面之外使用凭据,他们也可以编写一个机器人脚本来手动单击按钮或输入垃圾。因为您无法控制用户将尝试的操作,所以您可以做的唯一一件事就是通过相应地设置权限来确保他们只成功地完成了您希望他们做的事情。
https://stackoverflow.com/questions/61144252
复制相似问题