7

Serverless-Authentication-boilerplateを使用しており、カスタム エラー応答をマッピングしたいと考えています。ただし、常に 500 エラーが返されます。

authorize.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": ""
      }
  }
}
4

1 に答える 1

9

アマゾン ウェブ サービスに問い合わせてから。

残念ながら、オーソライザーのマッピングは現在構成可能ではなく、ラムダ関数から返されるすべてのエラーは、API ゲートウェイの 500 ステータス コードにマップされます。さらに、マッピングは出力の正確な文字列一致に対して実行されるため、意図した 401 エラーをクライアントに返すには、'context.fail('Unauthorized'); への呼び出しを実行する必要があります。

最後に、私は変わります

callback('401 Unauthenticated');

context.fail('Unauthorized');

そしてうまく働く。

これに遭遇する可能性のある人への共有。

于 2016-07-29T03:25:34.500 に答える