有几种方法可以基于身份验证机制执行此操作。
假设您使用 Cognito Identity 并使用 AWS IAM 流进行身份验证。然后,您将有 2 个策略,一个用于经过身份验证的用户,一个用于未经过身份验证的用户。
给定一个 GraphQL Schema
schema{
query:Query
mutation:Mutation
}
type Query{
listTodo(count:Int, paginationToken:String):[TodoConnection];
}
type Mutation{
addTodo(input:TodoInput):Todo
}
您的未经身份验证的政策看起来像
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"appsync:GraphQL"
],
"Resource": [
"arn:aws:appsync:us-west-2:<account-id>:apis/<api-id>/types/Query/fields/listTodo",
//-> below is for schema introspection
"arn:aws:appsync:us-west-2:<account-id>:apis/<api-id>/types/Query/fields/__schema"
]
]
}
}
您经过身份验证的用户策略看起来像
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"appsync:GraphQL"
],
"Resource": [
"arn:aws:appsync:us-west-2:<account-id>:apis/<api-id>/types/Mutation/fields/addTodo",
"arn:aws:appsync:us-west-2:<account-id>:apis/<api-id>/types/Query/fields/listTodo",
//-> below is for schema introspection
"arn:aws:appsync:us-west-2:<account-id>:apis/<api-id>/types/Query/fields/__schema"
]
]
}
}
如果您使用的是 JWT 令牌,那么您必须将每个 Cognito 用户池用户与一个组(如“管理员”、“用户”等)相关联。然后,您必须将每个查询/突变与可以使用 AWS AppSync auth 指令执行操作的 Cognito 组相关联。要做到这一点,您只需要更新如下架构:
schema{
query:Query
mutation:Mutation
}
type Query{
listTodo(count:Int, paginationToken:String):[TodoConnection];
@aws_auth(cognito_groups:["Users", "Admin"])
}
type Mutation{
addTodo(input:TodoInput):Todo
@aws_auth(cognito_groups:["Admin"])
}
基于 API 密钥的身份验证,无法控制操作。