使用 AWS Secrets Manager 保护 Stripe Webhook

问题描述 投票:0回答:1

我尝试使用 AWS Secrets Manager 保护 Stripe Webhook 端点Secret,但 Webhook 签名验证失败。 对于如何从 AWS Secrets Manager 访问 Webhook 端点Secret 的任何帮助,我们不胜感激

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

// Set the AWS region3
AWS.config.update({ region: 'us-east-2' });

// Create a Secrets Manager client
const secretsManager = new AWS.SecretsManager();

// Specify the secret name
const secretName = 'testSecretKeys';

// Retrieve the secret value
secretsManager.getSecretValue({ SecretId: secretName }, (err, data) => {
  if (err) {
    console.error(`Error retrieving secret: ${err}`);
  } else {
    // Parse and use the secret data
   
    secretData = JSON.parse(data.SecretString);
    const stripeSKKey = secretData['skXXX'];
    const stripePKKey = secretData['pkXXX'];
    //const endpointSecret = 'whsec_XXX';
    const endpointSecret = secretData['whepXXX'];
    const stripe = require('stripe')(stripeSKKey);

const express = require('express');
const app = express();

  app.post('/webhook', express.raw({type: 'application/json'}), (request, response) => {
    let event = request.body;
    // Only verify the event if you have an endpoint secret defined.
    // Otherwise use the basic event deserialized with JSON.parse
    if (endpointSecret) {
      // Get the signature sent by Stripe
      const signature = request.headers['stripe-sig'];
      try {
        event = stripe.webhooks.constructEvent(
          request.body,
          signature,
          endpointSecret
        );
      } catch (err) {
        console.log(`⚠️  Webhook signature verification failed.`, err.message);
        return response.sendStatus(400);
      }
stripe-payments webhooks aws-secrets-manager
1个回答
0
投票

从您的问题中不清楚您收到错误是因为您的密钥错误,还是因为您无法使用您正在使用的 AWS API 访问它。调试此问题的最佳方法是记录您正在使用的确切秘密,或者首先对正确的秘密进行硬编码以进行确认。

如果您有正确的秘密,则错误更有可能是由于未将原始 JSON 有效负载传递给 Stripe 的函数造成的。 Stripe 有 this doc 涵盖了签名验证错误的主要根本原因。它有关于 AWS Lamdba 的本节,这可能是您正在寻找的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.