AppSync:用于特定请求的授权函数

0

【以下的问题经过翻译处理】 我正在尝试为特定请求(这里是推送通知的主题订阅)设置授权函数。每当有人调用相应的“ function”/类型时,该函数应该被调用。

据我所了解,以下代码应该设置一个类型,该类型运行授权函数:

type Mutation {
	subscribe(topic: String, subscription: String): String
		@aws_lambda(name: "isAuthorizedToSubscribe")
}

请求映射模板如下所示:

{
    "version" : "2018-05-29",
    "operation": "PutItem",
    "key" : {
        "topic": { "S" :  "$ctx.args.topic" },
      	"subscription": $util.dynamodb.toDynamoDBJson($ctx.args.subscription)
    }
}

Lambda函数isAuthorizedToSubscribe

exports.handler = (event, context, callback) => {
    console.log("*** Authorization handler for subscription was called ***")
    return {isAuth: false} 
}

问题:Lambda函数没有被调用,请求总是通过。

注:

  • Lambda函数isAuthorizedToSubscribe有权被AppSync调用。
  • 这个问题仅涉及调用的授权问题。这不是关于身份验证的问题(应该通过其他措施(API密钥,Cognito等)在流程的早期完成)。
  • 我还尝试在映射模板中添加"authorizationFunction": "cbe-trial2-push-isAuthorizedToSubscribe",但请求时会导致Unsupported element '$[authorizationFunction]'的错误。
profile picture
EXPERTE
gefragt vor 5 Monaten76 Aufrufe
1 Antwort
0

【以下的回答经过翻译处理】 感谢您关于上述查询的联系。我想分享的是,我们可以使用***@aws_lambda*** AppSync指令来指定在使用多个授权模式时,应由AWS_LAMBDA授权模式授权类型的字段。通过此授权模式,我们可以使用Amazon Lambda函数实现自己的API授权逻辑。请注意,我们可以将Lambda函数用于主要或次要授权器之一,但每个API只能有一个Lambda授权函数。

例如,考虑以下样本模式,在其中我们将为特定请求调用Lambda授权函数:

type Author @aws_lambda {
	id: ID!
	title: String
}
type Mutation {
	createAuthor(input: CreateAuthorInput!): Author @aws_lambda
}

请注意,'@aws_lambda'指令将使用配置在AppSync API的授权模式中的Lambda函数。由于每个API只能使用一个Lambda授权函数,因此在使用此指令时不需要指定函数名称。

接下来,在我的测试设置中,我已执行了以下步骤以使授权生效:

  1. **编写Lambda函数以授权GraphQL API调用-**实现我们的业务逻辑以授权请求,在我的情况下,我实现了函数以检查授权令牌,如果值是自定义授权,则允许请求否则请求将被拒绝。
  2. **设置AWS Lambda作为AppSync授权模式-**将Lambda函数配置为AppSync API>>设置>>默认/附加授权模式(根据我们的用例)>> AWS_LAMBDA。 3.在从AppSync Console发出的变更请求时,将令牌传递给Lambda以进行验证。

使用上述步骤,我能够调用位于授权模式中设置的Lambda函数来授权请求。

有关详细信息,请参阅以下文档:

此外,如果您的用例是针对特定请求使用不同的 lambda 函数并在同一请求上处理/实现业务逻辑,那么您可以考虑针对该特定字段使用 Lambda 解析器。

profile picture
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen