使用 Amazon Cognito 指定用户访问控制

Specifying User Access Control with Amazon Cognito

正在处理 Amazon Cognito 的问题。到目前为止,为了访问我的 API 端点,您需要 header 中的授权令牌,例如

curl --location --request 
PUT 'https://endpoint.execute-api.<region>.amazonaws.com/dev/users/<user_Id>/<item_id>' \
--header 'authorizationToken: bearer token'

我想不通的是如何使它的粒度更细一些,因为使用这种方法,如果您有 user_id 的用户:X另一个用户可以说 user_id: Y 用户 X 可以与用户 Y 相同的资源交互,反之亦然。所以假设用户 X 将此请求发送到我的端点

curl --location --request 
PUT 'https://endpoint.execute-api.<region>.amazonaws.com/dev/users/X/ITEM1' \
--header 'authorizationToken: bearer token'

用户 Y 可以发送相同的请求

curl --location --request 
PUT 'https://endpoint.execute-api.<region>.amazonaws.com/dev/users/X/ITEM1' \
--header 'authorizationToken: bearer token'

并乱用用户 X 的数据。那么我如何配置 cognito 以返回只允许用户 X 与 his/her 项目交互以及用户 Y 与 his/her 项目而不是用户 X 的项目交互的不记名令牌。

如果您想控制对 AWS 服务(S3 等)的直接访问,您可以使用 Cognito 身份池,它可以帮助您分配身份并通过标准 IAM 控制访问。

如果我没理解错的话,你想要控制访问的资源是你自己的API。在这种情况下,您必须自己管理,您的 API 将必须通过从令牌(和 Cognito 的 userInfo 端点)获取身份来检查权限(防止垂直和水平权限升级),并允许或拒绝访问在基于您的规则的每个请求中,与传统的非 Cognito 应用程序或 API.

没有区别

Cognito 可以添加的是您可以为您的用户存储自定义属性(声明),您可以从 Cognito 获取这些属性并用于授权决策。