2016-07-29 58 views
0

我使用Serverless-Authentication-boilerplate並希望映射自定義錯誤響應。但它總是返回500錯誤。亞馬遜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

問亞馬遜網絡服務後。

不幸的是,Authorizer的映射當前不可配置,並且來自lambda函數的每個返回錯誤都將映射到API網關中的500狀態代碼。而且,映射是在輸出的精確字符串匹配上執行的,因此,爲了將預期的401錯誤返回給客戶端,您應該執行對'context.fail('Unauthorized');的調用。

最後,我改變

callback('401 Unauthenticated'); 

context.fail('Unauthorized'); 

和做工精細。

分享給誰可能會遇到這種情況。

+0

這是否記錄在AWS的任何地方? – dashmug

+0

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