要解决AWS API Gateway Authorizer不对非默认的Cognito用户池应用程序客户端令牌进行授权的问题,您可以使用自定义Lambda授权函数来实现授权。
以下是一个示例代码,演示了如何在自定义Lambda授权函数中对非默认的Cognito用户池应用程序客户端令牌进行授权:
import json
def lambda_handler(event, context):
# 获取Authorization标头中的令牌
token = event['headers']['Authorization']
# 验证令牌并对非默认的Cognito用户池应用程序客户端进行授权
if validate_token(token):
# 授权通过
return generate_policy('user_id', 'Allow', event['methodArn'])
else:
# 授权失败
return generate_policy('user_id', 'Deny', event['methodArn'])
def validate_token(token):
# 在此处添加验证令牌的代码逻辑
# 检查令牌是否有效,并对非默认的Cognito用户池应用程序客户端进行授权
# 返回True表示授权通过,返回False表示授权失败
return True
def generate_policy(principal_id, effect, resource):
# 生成API Gateway所需的策略文档
policy_document = {
'principalId': principal_id,
'policyDocument': {
'Version': '2012-10-17',
'Statement': [{
'Action': 'execute-api:Invoke',
'Effect': effect,
'Resource': resource
}]
}
}
return policy_document
在上面的示例代码中,validate_token函数是用于验证非默认Cognito用户池应用程序客户端令牌的自定义函数。您可以根据自己的需求实现该函数。
generate_policy函数用于生成符合API Gateway要求的策略文档,其中包含授权信息。
您可以将上述代码作为自定义Lambda授权函数,并将其与API Gateway的Authorizer集成。然后,您可以在API Gateway中配置Authorizer以使用自定义Lambda函数进行授权,并确保在配置Authorizer时选择正确的Cognito用户池应用程序客户端。
这样,当API Gateway接收到请求时,它将使用自定义Lambda授权函数进行授权,而不仅仅是对默认的Cognito用户池应用程序客户端令牌进行授权。