在AppSync Lambda授权器中获取Access Cookie而非authorizationToken的问题
关键配置调整
- 进入AppSync的API设置页面,找到Lambda授权器配置项,开启「Include request context」开关。这个设置会让AppSync将完整的HTTP请求上下文(包含Cookie)传递给Lambda授权器,而非仅传递
authorizationToken字段。 - 注意:开启该选项后,Lambda接收的
event参数结构会新增requestContext字段,需要同步调整授权逻辑的代码。
Lambda授权器代码示例
def lambda_handler(event, context): # 从请求上下文提取Cookie头部 headers = event.get('requestContext', {}).get('headers', {}) cookie_header = headers.get('cookie', '') # 解析Cookie键值对 cookies = {} if cookie_header: for cookie in cookie_header.split(';'): key, value = cookie.strip().split('=', 1) cookies[key] = value # 提取目标Cookie并验证 target_cookie = cookies.get('你的Cookie名称') if target_cookie and validate_cookie(target_cookie): return { "isAuthorized": True, "resolverContext": { "userId": "从Cookie中解析的用户ID" }, "deniedFields": [], "ttlOverride": 300 } else: return { "isAuthorized": False } def validate_cookie(cookie_value): # 实现Cookie验证逻辑:解密、签名校验、有效期检查等 return True
额外注意事项
- 确保客户端请求携带的Cookie作用域包含AppSync的API域名,避免跨域导致Cookie无法传递。
- 若为跨域请求,需在AppSync的CORS配置中允许携带Credentials,同时客户端请求需设置
withCredentials: true(前端框架如React、Axios均有对应配置)。 - 关于文档提到的「无authorizationToken直接返回未授权」:开启requestContext传递后,无需依赖
authorizationToken字段,只要能从Cookie中获取有效凭证,即可返回授权通过结果。
内容的提问来源于stack exchange,提问作者Rishabh Garg
相关产品推荐
相关产品推荐

