Amazon web services 我不明白我是如何使用AmazonCognito用户池来控制API网关RESTAPI中的访问的
我花了两天的时间试图理解亚马逊Cognito访问控制背后的想法,我正在尝试创建一个网站。很简单:Amazon web services 我不明白我是如何使用AmazonCognito用户池来控制API网关RESTAPI中的访问的,amazon-web-services,aws-lambda,amazon-cognito,Amazon Web Services,Aws Lambda,Amazon Cognito,我花了两天的时间试图理解亚马逊Cognito访问控制背后的想法,我正在尝试创建一个网站。很简单: 该网站允许用户创建帖子 任何人(匿名用户和登录用户)都应该能够看到帖子 只有已登录的用户才能创建帖子 只有原作者才能编辑自己的帖子 以下是我对亚马逊cognito的理解: Cognito用户池用于rest接口,标识池用于创建具有特定策略的临时amazon角色,以便登录到my service的用户可以直接访问aws服务,如dynamodb或s3 bucket 为了向我的rest接口发出授权请求,
- 该网站允许用户创建帖子
- 任何人(匿名用户和登录用户)都应该能够看到帖子
- 只有已登录的用户才能创建帖子
- 只有原作者才能编辑自己的帖子
- Cognito用户池用于rest接口,标识池用于创建具有特定策略的临时amazon角色,以便登录到my service的用户可以直接访问aws服务,如dynamodb或s3 bucket
- 为了向我的rest接口发出授权请求,用户必须使用cognito UI登录并接收访问令牌,该令牌必须与每个请求一起发送到rest API以验证请求
- 验证可以使用API网关中的cognito authorizer权限自动完成,或者将访问令牌重定向到lambda并直接在那里进行验证
- 如果通过cognito授权人完成,则无法从lambda中读取用户名和其他信息
- 如果我使用AWS Amplify在客户端处理请求授权,访问令牌将自动更新
- Cognito用户名保证是唯一的吗?如果没有,我如何让用户在注册或使用谷歌登录后选择保证唯一的用户名
- 访问令牌是否等同于会话cookie
- 如果我打算在lambda脚本中处理访问令牌,是否有我可以使用的库或服务?因为我还没有找到验证令牌或获取与令牌关联的用户的方法
- 为什么内置授权器不将用户信息重定向到lambda脚本
- 是否有一个我可以直接插入API网关的预构建lambda授权程序,允许登录用户和匿名用户向其发出请求,并将用户信息重定向到lambda脚本?因为我在存储库或其他任何地方都找不到
授权
报头内进行通信,并且cookie在cookie
报头内。一些服务将验证cookie,其他服务(特别是机器对机器)将验证授权
头。在某些情况下,开发人员可能会决定使用相同的方法,但并不总是这样
如果我打算在lambda脚本中处理访问令牌,是否有我可以使用的库或服务
如果您希望获取访问令牌的上下文(比如用户名,它被编码在JWT字符串中),那么您可以使用JWT解码函数。当请求到达lambda时,授权人已经对其进行了验证,因此您无需再次进行验证
为什么内置授权器不将用户信息重定向到lambda脚本
因为并非所有服务都需要/想要它。消费服务最好在解码令牌后对上下文执行所需的操作
是否有一个我可以直接插入API网关的预构建lambda授权程序,允许登录用户和匿名用户向其发出请求,并将用户信息重定向到lambda脚本
这个问题表明你对rest的理解有问题。API应该利用CRUD操作;因此,Create
只能授予贡献者,Read
可以公开授予,Update
只能授予所有者,Delete
只能授予所有者。以上是一个概括,但您需要一个API策略;当你制定这个策略时,你会意识到没有“简单”的按钮
通常,我会有两个API网关,一个用于只读,另一个用于管理内容。这使它保持简单,并允许您以不同的方式进行缩放(即您可能希望您的贡献者在缩放问题的情况下不会被只读使用阻止)
此外,采用基于路径的策略有助于简化谁可以获得哪些资源。以下面的例子为例:
用户向/api/blog/
发送POST请求以创建新博客(结果是/api/blog/:blogId
)。/api/blog/
端点不属于任何特定贡献者。稍后,用户会更新到/api/blog/1234 abcd
…现在,您的服务必须进行额外调用,以查看该资源是否由用户拥有(这称为“授权”过程)。在psuedo sql中,您可以从id='1234-abcd'
的博客中选择created by,然后查看created by
字段是否与您的用户id匹配
不管是谁,你都明白了:)如果你允许团队/多个用户修改资源,这将变得更加复杂……新的是,我们进入了RBAC(基于角色的访问控制),这是一个更长的主题
抱歉离题了,但希望这能给你更多的方向。谢谢你的回答,它澄清了很多问题。与此同时,我发现cognito令牌是JWT令牌,它用它编码所有用户信息,所以我会将它添加到您的答案中,供其他人使用。因此,您将创建两个不同的API Gat