Aws lambda 如何配置我的无服务器YML以使用我的API网关授权器?
我遵循教程使用Cognito通过API网关授权对lambda函数的访问 我已经用一个已验证的用户、一个API网关授权者和一个lambda函数创建了我的用户池,以登录并获取令牌ID 当我使用lambda函数获取令牌ID并在AWS控制台中测试它时,授权者返回200,因此我认为它正在工作,但当我尝试将令牌发送到lambda函数时,它返回“401 Unauthorized” 我的YML配置:Aws lambda 如何配置我的无服务器YML以使用我的API网关授权器?,aws-lambda,aws-api-gateway,serverless-framework,Aws Lambda,Aws Api Gateway,Serverless Framework,我遵循教程使用Cognito通过API网关授权对lambda函数的访问 我已经用一个已验证的用户、一个API网关授权者和一个lambda函数创建了我的用户池,以登录并获取令牌ID 当我使用lambda函数获取令牌ID并在AWS控制台中测试它时,授权者返回200,因此我认为它正在工作,但当我尝试将令牌发送到lambda函数时,它返回“401 Unauthorized” 我的YML配置: teste: handler: handler.teste memorySize: 128 even
teste:
handler: handler.teste
memorySize: 128
events:
- http:
path: teste
method: get
authorizer:
name: api-authorizer
arn: arn:aws:cognito-idp:XXXXXXXXX:XXXXXXXXXX:userpool/XXXXXXX_XXXXXXX
type: token
编辑
我查看了AWS控制台,我的lambda函数和API网关触发器有哪些细节:
Autorização: COGNITO_USER_POOLS
Caminho do recurso: /teste
Endpoint de API: https://XXXXXXXXX.execute-api.XXXXXXXXX.amazonaws.com/dev/teste
Estágio: dev
Método: GET
编辑2
我还发现,我的无服务器版本是1.47,看起来它是最新的版本,尽管我已经阅读了堆栈上的一些问题,其中他们说无服务器版本是1.5,我阅读了几次页面,我意识到我没有使用正确的方式,所以我将YML代码改为:
functions:
teste:
handler: handler.teste
memorySize: 128
events:
- http:
path: teste
method: get
type: COGNITO_USER_POOLS
authorizer:
arn: arn:aws:cognito-idp:XXXXXXXX:XXXXXXXXX:userpool/XXXXXXXX_XXXXXXXXX
authorizerId:
Ref: api-authorizer
我还将我的authorizer source更改为Authorization。当您定义一个authorizer时,它会要求用户定义一个标头,该标头将与令牌一起传递。你要发送这个标题吗?您可以共享执行API调用的客户端代码吗?我正在使用Postman发送我的请求,并添加这个头:x-API-token,这在API网关授权器测试中显示。这是正确的吗?标题的值是多少?我想了解的是你是如何得到这个代币的。所以说客户端代码,我的意思是:您目前如何针对cognito进行身份验证?在授权人本身中,有一个
令牌源
属性,您可以自己定义它。通常,人们坚持使用授权
。一旦您通过身份验证,您需要获取从Cognito发送的令牌并将其传递到您定义的头上。My authorizer不是lambda函数,它实际上是在AWS console>API Gateway>Authorizers>Create new authorizer中创建的。它会影响什么吗?我正在使用lambda函数登录cognito并向我发送令牌。这个函数是我在这里的问题中给出的答案: