2016-07-29 13 views
0

私はServerless-Authentication-boilerplateを使用し、カスタムエラー応答をマップしたいとします。しかし、それは常に500エラーを返します。Amazon API Gateway 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": "" 
     } 
    } 
} 

答えて

2

Amazon Webサービスにお尋ねした後。

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

最後に、私は

context.fail('Unauthorized'); 

と細かい作業に

callback('401 Unauthenticated'); 

を変更。

これに誰かが共有する可能性があります。

+0

これはAWSのどこに文書化されていますか? – dashmug

+0

ここ[REF](http://docs.aws.amazon.com/apigateway/latest/developerguide/use-custom-authorizer.html) – Jim

関連する問題