AWS AppSync 订阅:基于更新文档中的对象的复杂授权
Posted
技术标签:
【中文标题】AWS AppSync 订阅:基于更新文档中的对象的复杂授权【英文标题】:AWS AppSync Subscriptions: Complex Authorization based on Object with in Updated Document 【发布时间】:2019-03-21 14:40:02 【问题描述】:将被突变更改的对象包含一个 permissions
数组,其中包含 user
对象,该对象由 userId
和 write
权限布尔值组成。如果列表中存在用户的userId
,则用户对该对象具有读取权限。如果write
设置为true,用户也有写权限。
这使得从变异的角度修改对象更容易,但它使处理订阅变得更加困难,因为我无权访问在订阅创建时更新的对象。因此,我无法确保用户只有在拥有适当权限的情况下才能获得对象的更新。
我认为这没有什么不同(因为我无法在客户端安全地处理这个问题),但我正在构建一个 React Web 客户端。
有没有可行的办法解决这个问题?
【问题讨论】:
【参考方案1】:一种可能的解决方案是设置一个订阅所有新突变的服务器端作业。此服务器端侦听器将接收每个新突变,查看权限列表,并使用 None 数据源解析器发布给授权用户。用户只能使用其用户 ID 订阅订阅。
架构看起来像这样:
type Object
permissions: [User]
//.. Other fields
type User
userId: ID!
write: Boolean
// The server listener will populate this
type PublishPayload
userId: ID!
objectToPublish: Object
type Mutation
// The original mutation
updateObject(): Object
// The server-side listener will use this to publish. Attach a None Resolver to it.
publishToUser(userId: ID!): PublishPayload
type Subscription
// This subscription is used by the server to listen to all updateObject mutations
serverSubscription(): Object
@aws_subscribe(mutations:["updateObject"])
// This subscription is used by the users.
// You would add a resolver to it that fails authorization if they try to subscribe to a different user.
userSubscription(userId: ID!): PublishPayload
@aws_subscribe(mutations:["publishToUser"])
//.. More schema
希望这会有所帮助!
【讨论】:
这是个好主意。我今晚会试一试,让你知道它是怎么回事。我不禁觉得,总的来说,为了将 AppSync 用作 SaaS 提供商,我正在应用很多“变通办法”,但我认为就价格而言,没有什么比它更好的了。我只是希望它被证明是可维护的。 在这种情况下,服务器端侦听器是否不需要是 EC2 实例或容器,因为 Lambda 是短暂的?以上是关于AWS AppSync 订阅:基于更新文档中的对象的复杂授权的主要内容,如果未能解决你的问题,请参考以下文章
用于 AWS AppSync 中的异步计算的 Graphql 订阅