0

我正在尝试在 php 中实现一个身份验证中间件,用于 azures 语音到文本 api 的 webhook 回调。

我想为此使用 X-MicrosoftSpeechServices-Signature 标头。文档指出,这是有效载荷的 sha256 加密值,其密钥为密钥。

假设 webhook 发回如下请求:

{  
   "self":"https:\/\/southcentralus.api.cognitive.microsoft.com\/speechtotext\/v3.0\/transcriptions\/be783fbc-2836-480b-b678-76363dc0d0a7",
   "invocationId":"d00d3f00-2122-4c81-b5e6-1ce026805e7d"
}

标题就像(秘密是:aBdneoSDSDjw34dfsd2)

"x-microsoftspeechservices-signature":"zsPn2yNhsx9XYABxSqCtNHh3bnCMFL4zGTsdUhGjAGw="

所以,根据文档,我可以用我的秘密加密 sha256 中的有效负载,并且应该得到相同的签名,对吧?

$secret= "aBdneoSDSDjw34dfsd2"; 
$sig =   $request->header("X-MicrosoftSpeechServices-Signature");
$data = json_encode($request->getContent());
$sign =  hash_hmac(
        'sha256',
        $data ,
        $secret,
        true //use binary necessary??
);
dd($sig, $sign);

不幸的是,这些值不匹配。由于签名看起来像是另外进行了 base64 编码,所以我也尝试过:

dd($sig, base64_encode($sign ));

而且至少字符长度是一样的,但还是不匹配。我在这里想念什么?

4

0 回答 0