我正在为我的服务使用无服务器框架、node.js 和 typescript。我有一个自定义授权器,我从外部服务获取一些数据,并根据该服务的响应,我想在我的 lambda 中返回这样的错误代码。
问题是每次来自授权方的响应是(无论我如何返回错误以及它通过什么错误和状态码):
{
"statusCode": 403,
"error": "Forbidden",
"message": "No principalId set on the Response"
}
这是自定义授权者的细节,没有其他东西可以返回,还是可以以某种方式修改响应?
无服务器.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}
...
这是我的处理程序的简单代码
处理程序.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",
};
}
}