如何为AWS Lambda Function URL配置令牌式身份认证?
解决方案:Lambda Function URL 实现 Bearer 令牌认证
方法1:自定义授权器(规范推荐方案)
Lambda Function URL支持自定义授权器,这是替代硬编码认证逻辑的标准做法,能将认证与业务逻辑解耦:
核心流程:
- 创建独立的Lambda授权器函数,专门负责验证请求头中的
Authorization: Bearer <token>令牌 - 在Function URL配置中关联该授权器
- 请求到达时,AWS会先调用授权器验证令牌:
- 验证通过:请求转发至业务Lambda
- 验证失败:直接返回401/403错误,不会触发业务Lambda执行
- 创建独立的Lambda授权器函数,专门负责验证请求头中的
授权器函数示例(Python):
import json def lambda_handler(event, context): # 提取并校验Authorization头格式 auth_header = event.get('headers', {}).get('Authorization') if not auth_header or not auth_header.startswith('Bearer '): return {'isAuthorized': False, 'context': {}} token = auth_header.split(' ')[1] # 替换为你的令牌验证逻辑(比如对比预存有效令牌、调用OAuth服务校验等) valid_tokens = ['your-valid-token-001', 'your-valid-token-002'] if token not in valid_tokens: return {'isAuthorized': False, 'context': {}} # 验证通过后,可返回上下文信息供业务函数使用 return { 'isAuthorized': True, 'context': {'user_id': 'user_123', 'token_scope': 'full_access'} }
- 配置步骤:
- 进入业务Lambda的「配置」→「Function URL」页面
- 编辑配置,将「Auth type」从默认的AWS_IAM切换为「Custom」
- 选择已创建的授权器函数,设置超时时间(建议10秒内)和缓存TTL(减少重复验证开销)
方法2:Amazon Cognito集成(适合用户身份场景)
如果你的Bearer令牌是Cognito用户池/身份池签发的JWT令牌,可直接将Function URL的认证方式配置为Amazon Cognito:
- 配置时选择「Auth type」为「Amazon Cognito」,关联你的目标用户池
- 请求携带Cognito签发的ID Token或Access Token,AWS会自动完成令牌有效性校验,无需编写自定义授权器
不推荐硬编码认证逻辑的原因
- 业务代码与认证逻辑耦合,后续维护、扩展成本高
- 认证失败时仍会触发业务Lambda,浪费计算资源
- 无法利用AWS内置的认证缓存、权限管控等优化能力
内容的提问来源于stack exchange,提问作者Erik Fubel
相关产品推荐
相关产品推荐

