【问题标题】:custom authorizers in Amazon API Gateway 500 errorAmazon API Gateway 500 错误中的自定义授权方
【发布时间】:2016-12-03 15:41:13
【问题描述】:

我使用Serverless-Authentication-boilerplate 并希望映射自定义错误响应。但它总是返回 500 错误。

授权.js

// Authorize
function authorize(event, callback) {
  let providerConfig = config(event);
  try {
    let data = utils.readToken(event.authorizationToken, providerConfig.token_secret);
    console.log("Decrypted data: " + JSON.stringify(data));

    let methodArn = event.methodArn.replace(/(GET|POST|PUT|DELETE)/g, '*').replace(/mgnt.+/g, 'mgnt/*');

    console.log(`Change methodArn to: ${methodArn}`);

    // TODO: handle expiration time validation
    callback(null, utils.generatePolicy(
      data.id, // which is $context.authorizer.principalId
      'Allow',
      methodArn));
  } catch (err) {
    console.log(err);
    callback('401 Unauthenticated');
  }
}

s-function.json

responses:{ 
  "401 Unauthenticated.*": {
      "statusCode": "401"
  },
  "default": {
      "statusCode": "200",
      "responseModels": {
        "application/json;charset=UTF-8": "Empty"
      },
      "responseTemplates": {
        "application/json;charset=UTF-8": ""
      }
  }
}

【问题讨论】:

    标签: aws-lambda aws-api-gateway serverless-framework


    【解决方案1】:

    询问亚马逊网络服务后。

    不幸的是,Authorizer 的映射当前不可配置,并且从 lambda 函数返回的每个错误都将映射到 API 网关中的 500 状态代码。此外,映射是在输出的精确字符串匹配上执行的,因此,为了向客户端返回预期的 401 错误,您应该执行对 'context.fail('Unauthorized'); 的调用。

    最后,我改变了

    callback('401 Unauthenticated');
    

    context.fail('Unauthorized');
    

    并且工作正常。

    分享给可能遇到这种情况的人。

    【讨论】:

    • 这是否记录在 AWS 的任何地方?
    • 这里REF
    • 我在您链接到的文档中找不到fail() 方法,但是我找到了find it here。文档状态为We recommend you use the callback,因此它似乎已过时,但目前我没有看到更好的解决方案来返回401
    • 问题是 context.fail('Unauthorized'); 导致 lambda 执行失败。并且当您在每次 lambda 执行失败时触发警报时,您将收到每个未授权请求的通知。这可能是一个过期的令牌,这很好,不会导致 lambda 执行失败。
    • 添加它确实有效,但随后我收到警告警告:Auth function 'authorizer' 返回了一个 promise 并且还使用了回调!有没有任何 Promise 安全的方法来做到这一点?
    猜你喜欢
    • 1970-01-01
    • 2018-10-01
    • 2016-11-30
    • 1970-01-01
    • 2020-06-17
    • 2019-03-04
    • 2018-04-17
    • 2018-01-15
    • 2020-06-30
    相关资源
    最近更新 更多