Javascript 由于文档中唯一的示例是Golang,有人可以帮助验证节点中Sendgrid签名的webhook吗?

Javascript 由于文档中唯一的示例是Golang,有人可以帮助验证节点中Sendgrid签名的webhook吗?,javascript,cryptography,cryptojs,Javascript,Cryptography,Cryptojs,我正在尝试验证来自Sendgrid签名webhook的签名。 当前的Sendgrid文档仅提供了Golang中使用ecdsa包的示例 他们说这可以通过节点加密包实现,但我对加密语言没有太多的了解 有人能帮我把当前的Golang代码库解析成javascript吗 // Golang Example s := http.Request.Header.Get("X-Twilio-Email-Event-Webhook-Signature") ts := http.Request.

我正在尝试验证来自Sendgrid签名webhook的签名。 当前的Sendgrid文档仅提供了Golang中使用ecdsa包的示例

他们说这可以通过节点加密包实现,但我对加密语言没有太多的了解

有人能帮我把当前的Golang代码库解析成javascript吗

// Golang Example
s := http.Request.Header.Get("X-Twilio-Email-Event-Webhook-Signature")
ts := http.Request.Header.Get("X-Twilio-Email-Event-Webhook-Timestamp")

signatureBytes, _ := base64.StdEncoding.DecodeString(s)
ecdsaSig := struct {
R *big.Int
S *big.Int
}

asn1.Unmarshal(signatureBytes, &ecdsaSig)

tsBytes := []byte(ts)
payload, _ := ioutil.ReadAll(http.Request.Body)
h := sha256.New()
h.Write(tsBytes)
h.Write(payload)
hashedPayload := h.Sum(nil)

ecdsa.Verify(publicKey, hashedPayload, ecdsaSig.R, ecdsaSig.S)

我用sendgrid go eventwebhook助手做签名验证,你可以访问代码。问题是,它只能验证单个事件webhook,因此如果多个事件(Exp:single request payload中的processed and delived event)验证将失败。sendgrid nodejs项目中当前报告了此错误

导入(
“github.com/gin gonic/gin”
“github.com/sendgrid/sendgrid go/helpers/eventwebhook”
)
const verkey=“xxx”
函数插入历史(c*gin.Context){
var results[]映射[string]接口{}
如果err:=c.BindJSON(&results);err!=nil{
fmt.Println(错误)
}
//开始检查签名
s:=c.Request.Header.Get(“X-Twilio-Email-Event-Webhook-Signature”)
ts:=c.Request.Header.Get(“X-Twilio-Email-Event-Webhook-Timestamp”)
有效负载:=generatePayload(结果)
publicKey,:=eventwebhook.ConvertPublicKeyBase64ToECDSA(verkey)
b、 err:=eventwebhook.VerifySignature(公钥、有效载荷、s、ts)
如果错误!=零{
fmt.Println(错误)
}
fmt.Printf(“H.签名:%s\nH.时间戳:%s\n密钥:%s\n公钥:%s\n验证:%t”、s、ts、verkey、publicKey、b)
}

我使用sendgrid go eventwebhook助手进行签名验证,您可以访问代码。问题是,它只能验证单个事件webhook,因此如果多个事件(Exp:single request payload中的processed and delived event)验证将失败。sendgrid nodejs项目中当前报告了此错误

导入(
“github.com/gin gonic/gin”
“github.com/sendgrid/sendgrid go/helpers/eventwebhook”
)
const verkey=“xxx”
函数插入历史(c*gin.Context){
var results[]映射[string]接口{}
如果err:=c.BindJSON(&results);err!=nil{
fmt.Println(错误)
}
//开始检查签名
s:=c.Request.Header.Get(“X-Twilio-Email-Event-Webhook-Signature”)
ts:=c.Request.Header.Get(“X-Twilio-Email-Event-Webhook-Timestamp”)
有效负载:=generatePayload(结果)
publicKey,:=eventwebhook.ConvertPublicKeyBase64ToECDSA(verkey)
b、 err:=eventwebhook.VerifySignature(公钥、有效载荷、s、ts)
如果错误!=零{
fmt.Println(错误)
}
fmt.Printf(“H.签名:%s\nH.时间戳:%s\n密钥:%s\n公钥:%s\n验证:%t”、s、ts、verkey、publicKey、b)
}

你能问一个更具体的问题吗?现在你基本上是在问“有人能帮我把这个代码移植到节点上吗?”这与StackOverflow无关。我建议您首先尝试自己解决问题,并编辑您的问题,以包括您的代码和您遇到问题的特定错误消息或行为。下面是一个使用@sendgrid/eventwebhok的示例。您可以问一个更具体的问题吗?现在你基本上是在问“有人能帮我把这个代码移植到节点上吗?”这与StackOverflow无关。我建议您首先尝试自己解决问题,并编辑问题,以包括您的代码以及您遇到问题的特定错误消息或行为。下面是使用@sendgrid/eventwebhok的示例