如何在AppSync控制台测试VTL解析器时设置用户池授权类型?
问题描述
我正在调试由Amplify创建的GraphQL API的认证规则,该API的authenticationType已设置为AMAZON_COGNITO_USER_POOLS且已在API设置中确认。我能在AWS AppSync控制台看到Amplify为Message对象创建的认证函数,其中关键的是作为VTL解析器的QuerygetMessageauth0Function。我可创建测试上下文,直接测试该解析器在不同输入参数和认证信息下的返回结果,但点击“Run Test”测试时,$util.authType()返回“API Key Authorization”而非预期的用户池授权。请问如何在测试时让$util.authType()返回“User Pool Authorization”?
解决步骤
- 在AppSync控制台的解析器测试页面,找到Test Context配置区域
- 手动修改上下文的
request.headers,添加Cognito用户池授权所需的头部信息:"request": { "headers": { "Authorization": "Bearer <你的Cognito用户ID令牌>" } } - 同时,可在上下文的
context.identity部分补充用户池身份的相关字段(模拟真实授权场景,可选但推荐):"context": { "identity": { "username": "<你的Cognito用户名>", "sub": "<用户的Cognito唯一标识>", "issuer": "<你的Cognito用户池域名>", "claims": { "cognito:username": "<你的Cognito用户名>", "email": "<用户邮箱>" }, "sourceIp": ["127.0.0.1"], "defaultAuthStrategy": "AMAZON_COGNITO_USER_POOLS" } } - 保存修改后的测试上下文,再次点击“Run Test”,此时
$util.authType()会返回“User Pool Authorization”
补充说明
- 需先从Cognito用户池获取有效的ID令牌:可通过Amplify Auth模块的
Auth.currentSession()方法获取,或在Cognito控制台的测试用户页面生成临时令牌 - 确保
Authorization头部格式正确,必须是Bearer+ 空格 + 令牌字符串
内容的提问来源于stack exchange,提问作者sil
相关产品推荐
相关产品推荐

