微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Lambda自定义授权,如何返回自定义消息?

如何解决Lambda自定义授权,如何返回自定义消息?

我正在为我的服务使用无服务器框架,node.js和打字稿。我有一个自定义授权者,我在其中从外部服务中获取一些数据,并根据该服务的响应,我想在我的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",};
  }
}

解决方法

关于私人:真实

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。