You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

API Gateway授权器配置问题:如何在foo或bar头存在时触发并启用缓存?

API Gateway 授权器多请求头“或”触发+缓存实现方案

问题背景

要配置授权器,要求请求携带foo或bar头时触发,但直接设置两个身份源会要求两者同时存在;不设身份源又无法启用缓存。以下是两种可行的解决办法:

方法一:Lambda授权器自定义逻辑+固定身份源占位

  1. 选一个所有请求必然携带的头(比如Host)作为身份源,这样就能正常开启缓存,缓存键基于该头生成。
  2. 在Lambda授权器代码里自定义判断逻辑:检查请求中是否存在foo或bar头,任意一个存在就执行授权验证。
  3. 优化缓存精度:如果需要根据实际的foo/bar值缓存授权结果,可在Lambda返回的context中传入对应的凭证值,然后在授权器配置里开启「缓存键包含上下文」,让API Gateway把context内容也纳入缓存键计算。

示例Python Lambda代码:

def lambda_handler(event, context):
    headers = event.get('headers', {})
    # 检查foo或bar是否存在
    auth_token = headers.get('foo') or headers.get('bar')
    if auth_token:
        # 这里替换成你的实际授权验证逻辑
        is_valid = validate_token(auth_token)
        if is_valid:
            return {
                'principalId': 'authorized_user',
                'policyDocument': {
                    'Version': '2012-10-17',
                    'Statement': [{
                        'Action': 'execute-api:Invoke',
                        'Effect': 'Allow',
                        'Resource': event['methodArn']
                    }]
                },
                'context': {'auth_token': auth_token}
            }
    # 无有效头或验证失败,拒绝访问
    return {
        'principalId': 'unauthorized',
        'policyDocument': {
            'Version': '2012-10-17',
            'Statement': [{
                'Action': 'execute-api:Invoke',
                'Effect': 'Deny',
                'Resource': event['methodArn']
            }]
        }
    }

def validate_token(token):
    # 实现你的token验证逻辑
    return token is not None

方法二:请求参数映射生成自定义身份源

  1. 在API Gateway的集成请求配置中,添加请求参数映射,创建自定义头(比如auth-source),映射规则为:若foo存在则取其值,否则取bar的值,两者都不存在则为空。
  2. 将auth-source设为授权器的身份源,这样只要foo或bar有一个存在,auth-source就有值,满足授权器触发条件,同时可基于该自定义头启用缓存。
  3. 授权器中直接验证auth-source的值即可,无需再单独处理foo和bar。

注意事项

  • 缓存键准确性:方法一中要开启「缓存键包含上下文」,确保不同的foo/bar值对应不同的缓存条目;方法二中直接用auth-source的值作为缓存键,天然具备准确性。
  • 授权器触发可靠性:方法一中选的身份源必须是所有请求都携带的,否则API Gateway会跳过授权器;方法二中的自定义头只要foo或bar存在就会有值,能保证授权器触发。

内容的提问来源于stack exchange,提问作者Hugo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 23:47:36