当使用AWS Cognito Lambda授权者时,如果您在API Gateway中收到401未经授权的错误,可能是由于以下原因引起的:
def lambda_handler(event, context):
# 检查请求中的授权信息
if 'authorizationToken' not in event:
# 返回未经授权的错误
return {
'statusCode': 401,
'body': 'Unauthorized'
}
# 检查授权令牌是否有效
authorization_token = event['authorizationToken']
if not is_token_valid(authorization_token):
# 返回未经授权的错误
return {
'statusCode': 401,
'body': 'Unauthorized'
}
# 处理授权成功的逻辑
# ...
# 返回授权成功的响应
return {
'statusCode': 200,
'body': 'Authorized'
}
在上面的示例中,我们首先检查请求中是否包含授权令牌。如果没有授权令牌,我们返回401未经授权的错误。如果授权令牌存在,我们再检查它是否有效。如果授权令牌无效,我们同样返回401未经授权的错误。如果一切正常,我们可以继续处理授权成功的逻辑。
API Gateway未正确配置:在API Gateway中,您需要确保已正确配置了Cognito Lambda授权者。请确保已选择正确的Lambda函数,并将它配置为授权类型为“AWS_IAM”。
Lambda函数角色缺少必要的权限:Lambda函数的执行角色需要具有适当的权限来验证Cognito令牌。请确保您的Lambda函数角色具有执行Cognito操作所需的权限。您可以根据需要为Lambda函数角色添加以下IAM策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cognito-idp:AdminInitiateAuth",
"cognito-idp:AdminRespondToAuthChallenge"
],
"Resource": "*"
}
]
}
上面的策略允许Lambda函数执行Cognito身份池的AdminInitiateAuth和AdminRespondToAuthChallenge操作。根据您的需求,您可以根据实际情况调整策略。
通过检查以上几个方面,您应该能够解决AWS Cognito Lambda授权者中的401未经授权的错误。