技能端点不接受有效的签名请求

The skill endpoint is not accepting valid signed requests

我正在使用 Alexa skills Dot Net 库开发自己的 Alexa skill (https://github.com/timheuer/alexa-skills-dotnet), Everything worked fine while testing but when I submitted the skill for review I get This error.

我做了一些研究,发现我需要验证传入的请求是否来自 Alexa,并且我可以使用库中的 RequestVerification 方法来验证,所以这是我的代码:

var payload = await req.ReadAsStringAsync();
var skillRequest = JsonConvert.DeserializeObject<SkillRequest>(payload);


Uri signatureCertChainUrl = new Uri(req.Headers["SignatureCertChainUrl"]);
string signature = req.Headers["Signature"];

bool isValid = await RequestVerification.Verify(signature, signatureCertChainUrl, payload);
if (!isValid)
{
   return new BadRequestResult(); 
}
else
{
  //code related to the skill
}

我仍然收到错误消息,是不是我遗漏了什么?

这是与该问题相关的亚马逊文档:https://developer.amazon.com/en-US/docs/alexa/custom-skills/host-a-custom-skill-as-a-web-service.html#cert-verify-signature-certificate-url

您的 URL 验证似乎不合格。查看 Verify that the request was sent by Alexa. Since, you are not using JavaScript, Java, or Python, you don't have this validation pre-defined in your SDK. Hence, you have to Manually verify that the request was sent by Alexa

要手动验证请求是否来自 Alexa 服务,您必须编写执行以下步骤的代码:

  • 检查请求签名以验证请求的真实性。 Alexa 签署所有 HTTPS 请求。有关详细信息,请参阅 Check the request signature
  • 检查请求时间戳以确保该请求不是作为重放攻击的一部分发送的旧请求。有关详细信息,请参阅 Check the request timestamp

我知道哪里出了问题!

我有一个异常块,它没有 return 像这样的错误请求:

catch (Exception e)
{
    return new BadRequestResult();
}

如果其他人遇到此问题,请确保代码中的所有路径都达到 Alexa 期望的响应。在我的例子中,它一直到达代码的一部分,它期望 400 错误消息,因为 null 异常但得到了其他东西,因为 Alexa 假设我不接受有效的签名请求并抛出错误。

希望这对其他正在为此苦苦挣扎的人有所帮助!