手动签署 AppSync URL 以在 Lambda 中使用会出现错误的签名错误

2023-11-30

在 Lambda 中,我想签署我的AppSync端点与aws-signature-v4以便将其用于突变。

生成的 URL 似乎没问题,但当我尝试它时,它给了我以下错误:

{ "errors" : [ { "errorType" : "InvalidSignatureException", "message" : "The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details. etc... } ] }

这是我的 lambda 函数

import { Context, Callback } from 'aws-lambda';
import { GraphQLClient } from 'graphql-request';

const v4 = require('aws-signature-v4');

export async function handle(event: any, context: Context, callback: Callback) {
  context.callbackWaitsForEmptyEventLoop = false;

  const url = v4.createPresignedURL(
    'POST',
    'xxxxxxxxxxxxxxxxx.appsync-api.eu-west-1.amazonaws.com',
    '/graphql',
    'appsync',
    'UNSIGNED-PAYLOAD',
    {
      key: 'yyyyyyyyyyyyyyyyyyyy',
      secret: 'zzzzzzzzzzzzzzzzzzzzz',
      region: 'eu-west-1'
    }
  );

  const mutation = `{
    FAKEviewProduct(title: "Inception") {
      productId
    }
  }`;

  const client = new GraphQLClient(url, {
    headers: {
      'Content-Type': 'application/graphql',
      action: 'GetDataSource',
      version: '2017-07-25'
    }
  });

  try {
    await client.request(mutation, { productId: 'jfsjfksldjfsdkjfsl' });
  } catch (err) {
    console.log(err);
    callback(Error());
  }

  callback(null, {});
}

我得到了我的key and secret通过创建一个新用户并Allowing him appsync:GraphQL action.

我究竟做错了什么?


这就是我通过发出简单的 HTTP 请求来触发 AppSync 突变的方法,使用axios.

const AWS = require('aws-sdk');
const axios = require('axios');

exports.handler = async (event) => {    
    let result.data = await updateDb(event);

    return result.data;
};

function updateDb({ owner, thingName, key }){
    let req = new AWS.HttpRequest('https://xxxxxxxxxxx.appsync-api.eu-central-1.amazonaws.com/graphql', 'eu-central-1');
    req.method = 'POST';
    req.headers.host = 'xxxxxxxxxxx.appsync-api.eu-central-1.amazonaws.com';
    req.headers['Content-Type'] = 'multipart/form-data';
    req.body = JSON.stringify({
        "query":"mutation ($input: UpdateUsersCamsInput!) { updateUsersCams(input: $input){ latestImage uid name } }",
        "variables": {
            "input": {
                "uid": owner,
                "name": thingName,
                "latestImage": key
            }
        }
    });

    let signer = new AWS.Signers.V4(req, 'appsync', true);
    signer.addAuthorization(AWS.config.credentials, AWS.util.date.getDate());

    return axios({
        method: 'post',
        url: 'https://xxxxxxxxxxx.appsync-api.eu-central-1.amazonaws.com/graphql',
        data: req.body,
        headers: req.headers
    });
}

确保为您的 Lambda 函数运行时的 IAM 角色授予权限appsync:GraphQL.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

手动签署 AppSync URL 以在 Lambda 中使用会出现错误的签名错误 的相关文章

随机推荐

  • 漂亮的 URL ASP.NET MVC

    如何获得漂亮的网址 如 localhost 8888 News Example post 而不是 localhost 8888 Home Details 2 我的 HomeController 有以下详细信息方法 public Action
  • 重新部署远程 glassfish 货物失败

    我目前正在尝试使用 Cargo 通过 Atlassian 的 Bamboo 在远程 glassfish 3 1 2 上部署应用程序 这是一个开发环境 因此具有不同版本号的相同应用程序每次都会部署在相同的上下文根上 但每次我以 Maven 目
  • 日期选择器 minDate 今天和 maxDate 明年 12 月 31 日

    尝试将日期选择限制在今天和明年 12 月 31 日之间 function public holiday date pick datepicker minDate 0 yearRange 0 1 maxDate hideIfNoPrevNex
  • 如何在Python pandas中从Excel文档中读取数据透视表?

    我有一份 Excel 文档 其中包含体育栏 其中有体育名称和运动员姓名 如果我点击运动名称 运动员的名字就会消失 即运动员的名字是运动名称的子代 Please look at the data below 如果我点击板球 那么 ramesh
  • 如何在 Express 中发送标头 [MEAN]

    我是 Express 的初学者 所以我可能没能正确地提出这个问题 我创建了一个 MEAN 应用程序 其中我将我的frontend and backened 前端运行于port 4200服务器运行于port 3000 作为部署的一部分 我想在
  • python绘图日期轴作为字符串而不是日期

    我想使用 pythonplotly 创建一个条形图 其中 x 轴日期作为字符串 类别 由于某种原因 plotly 不断将字符串转换为日期 我的 x 轴是日期的连续 时间线 而不是我期望的类别 我的问题 如何构建一个条形图 将我的日期作为类别
  • RichTextBox 的只读内容不显示图像

    我遇到过一些奇怪的行为RichTextBox 我希望它是readonly 但是当我使用时它不显示图像richTextBox LoadFile path 加载方法 rtf文件 当它不是readonly文件已正确加载并显示图像 我正在使用 Wi
  • Android折叠工具栏:如何调整文本大小,使其显示全文而不是部分文本

    我正在使用 CollapsingToolbarLayout 我使用以下代码来显示标题 collapsingToolbar CollapsingToolbarLayout findViewById R id collapsing toolba
  • jQuery UI Slider - 禁用轨道上的滑动/启用手柄 mousedown

    我有一个 jQuery UI 滑块 当用户尝试使用轨道滑动时我想禁用它 它应该仅在有人将手柄拖动到某处时才起作用 启用 应禁用单击并尝试拖动滑动来移动手柄 我不确定这是否可以使用来完成unbind or mousedown event 我注
  • MVC 中的简单会员提供程序

    如何从 ASP NET MVC4 中的空 Web 应用程序模板创建简单的会员提供程序 我在谷歌 必应和许多其他网站上搜索了很多 但没有得到关于会员提供商的积极回应 有人可以告诉我会员提供商的基本情况吗 please 我按照以下步骤操作 因此
  • Enter 键上的 JQuery 自动完成操作

    我希望自动完成功能像这样 当用户在文本框中输入内容时 不应发生任何事情 仅当用户完成书写时才应出现自动完成建议列表 在文本框中输入并按回车键 知道如何做到这一点 或者在哪里更改代码 STEP 1
  • 从打开的“FILE*”获取缓冲参数

    在C中 我们可以使用设置vbuf 设置缓冲区 其大小和缓冲模式 我惊讶地发现没有人问如何read这些值 给定一个开放的FILE e g stdout 或用户提供 即 如何实现 getvbuf 例行公事 甚至是其中的一部分 void getv
  • 为什么我的 Xamarin iOS 中的 WebRequest 在 ipv6 环境中失败?

    我设置了本地ipv6环境如下https developer apple com library content documentation NetworkingInternetWeb Conceptual NetworkingOvervie
  • 如何使用 Microsoft Bot Framework 显示来自我的机器人的欢迎消息

    我想在有人连接到我的机器人时显示欢迎消息 我使用了 github 上的 demo ContosoFlowers 示例中的技术 https github com Microsoft BotBuilder Samples tree master
  • 绘制太多点?

    R 基 格或其他 如何从 100000 个元素向量 或输出该值的函数 创建图形 它会阴谋一些而拒绝另一些吗 将所有内容都放在彼此之上 我怎样才能改变这种行为 我怎样才能创建一个图表 让我在每个时间间隔都能看到最大值和最小值 就像交易 条形
  • 导出的 JAR 无法读取图像 [重复]

    这个问题在这里已经有答案了 我正在尝试让图像显示在 JPanel 中 这是我正在使用的代码 URL imageURL BufferedImage image null ImageIcon icon imageURL getClass get
  • 使用 PDO 在 postgres 中自动回滚

    我发现postgres PDO自动回滚当抛出异常时 先前的更改 即使异常被捕获并吞下 示例 伪代码 transaction gt begin try manager gt insert INSERT try manager gt exec
  • Pandas - DataFrame 聚合行为异常

    相关Dataframe聚合方法传递列表问题 and Pandas 无法使用聚合函数列表进行聚合 考虑这个数据框 import pandas as pd import numpy as np df pd DataFrame index ran
  • 如何使用 dill 库通过 shelve 库进行对象序列化

    我在用着PyMemoize缓存协程的库 我装饰了协程 但是当 Python 调用它时 我得到 TypeError can t pickle coroutine objects 发生这种情况是因为PyMemoize内部尝试腌制协程并将其存储在
  • 手动签署 AppSync URL 以在 Lambda 中使用会出现错误的签名错误

    在 Lambda 中 我想签署我的AppSync端点与aws signature v4以便将其用于突变 生成的 URL 似乎没问题 但当我尝试它时 它给了我以下错误 errors errorType InvalidSignatureExce