【问题标题】:Lambda custom authorize, how to return custom message?Lambda 自定义授权,如何返回自定义消息?
【发布时间】:2023-03-27 17:45:02
【问题描述】:

我正在为我的服务使用无服务器框架、node.js 和 typescript。我有一个自定义授权器,我从外部服务获取一些数据,并根据该服务的响应,我想在我的 lambda 中返回这样的错误代码。

问题是每次来自授权方的响应都是(不管我如何返回错误以及它传递了什么错误和状态码):

{
  "statusCode": 403,
  "error": "Forbidden",
  "message": "No principalId set on the Response"
}

这是自定义授权者的细节,没有其他东西可以返回,还是可以以某种方式修改响应?

serverless.yml

...
functions:
  users:
      handler: lambdas/users/handler.main
      events:
        - http:
            path: /users
            method: GET
            private: true
            authorizer:
              name: customAuthorizer
              resultTtlInSeconds: 0
  customAuthorizer:
      handler: lambdas/custom-authorizer/handler.handler
      environment:
        APP_NAME: ${env:APP_NAME} 
   ...

这是来自我的处理程序的简单代码

handler.ts

export async function handler(event: APIGatewayTokenAuthorizerEvent, context: Context): Promise<any> {
  context.callbackWaitsForEmptyEventLoop = false;
  try {
    if (!event.authorizationToken) {
      throw new HttpError("Unauthorized", 401);
    }

    const hasAccess = await fetchingPolicyFromExternalService(event.authorizationToken);
    if (!hasAccess) {
      throw new HttpError("Forbidden", 403);
    }

    const policyDocument = generatePolicy(event, "Allow"); //generate policy for Allow user to invoke api

    return policyDocument;
  } catch (error) {
    if (error instanceof HttpError) {
      return {
        statusCode: error.status,
        body: error.message,
      };
    }
    return {
      statusCode: 500,
      body: "UnknownError",
    };
  }
}

【问题讨论】:

    标签: node.js aws-lambda serverless-framework lambda-authorizer


    【解决方案1】:

    关于私有:true

    连接到此 Rest API 的客户端将需要在其请求的 x-api-key 标头中设置任何这些 API 密钥值。这仅对私有属性设置为 true 的函数是必需的。

    https://www.serverless.com/framework/docs/providers/aws/events/apigateway/

    不确定您是如何发送请求的,但请考虑这部分。可能是您缺少标头信息,这就是为什么它总是这样回答(即不是您的授权人,但您的功能受到保护)。因此,此响应可能来自您的函数,而不是授权者。

    【讨论】:

      猜你喜欢
      • 2020-09-23
      • 2020-09-08
      • 2015-05-12
      • 2017-07-19
      • 1970-01-01
      • 2012-05-22
      • 1970-01-01
      • 2019-10-21
      • 1970-01-01
      相关资源
      最近更新 更多