【发布时间】:2020-06-30 01:21:35
【问题描述】:
我正在尝试使用 AWS API Gateway 上的自定义授权器(验证 jwt)来保护 lambda 函数。我还想将任何queryStringParameters 传递到我的 lambda 函数中,所以我想将我的集成请求保持为 Lambda 代理。
自定义授权方已设置、测试和工作
问题:
当我调用这个端点时(在部署之后),我收到了一个HTTP 500 响应。
{
"message": "Internal server error"
}
当我删除我的自定义授权方或取消选择 lambda 代理集成时,我会收到来自我的 lambda 的正常输出
def lambda_handler(event, context):
return {
'status': 400,
'body' : json.dumps('hello World'),
'headers': {
'Access-Control-Allow-Origin': "*"
},
'isBase64Encoded': 'false'
}
有人遇到过这个吗? AWS 关于这个问题的文档很少:/
谢谢!
【问题讨论】:
-
自定义授权人的代码是什么?
-
def handler(event, context): token = event['authorizationToken'].split(' ')[1] audience = {hidden} certificateFile = open("hidden",'r') certificateLines = certificateFile.readlines() certificate = ''.join(certificateLines) try: decoded = jwt.decode(token, publicKey, algorithms='RS256', audience=audience) return generatePolicy(decoded['sub'], 'Allow') except: return generatePolicy(None, 'Deny') -
抱歉,Marcin,我似乎无法在评论中正确格式化我的代码。但是,我的 auth 函数返回具有正确 ARN 的正确策略。我确信这一点,因为如果我禁用 Lambda 代理,那么我的身份验证函数会正确检查 jwt 令牌,并调用我的 lambda 函数(没有事件对象的属性,如 queryStringParameters)
-
通过控制台测试您的 Lambda 授权方,看看您是否获得了正确的策略。由于授权函数导致的 500 错误可能是因为 API 没有调用该函数的权限,或者该函数没有以正确的格式返回策略。
标签: amazon-web-services aws-lambda aws-api-gateway aws-serverless