twilio.js浏览器软电话 - JWT签名验证问题(Mac OSX / Chrome)

时间:2016-10-19 17:57:27

标签: javascript python twilio jwt twilio-api

使用Twilio官方tutorial code here,我得到一个正常运行的电话号码和TwiML应用程序,并启动printf()服务器和flask转发进程。操作系统和浏览器为ngrok

不幸的是,它失败了,给出了这个错误:Chrome 53.0.2785.143 (64-bit) on Mac OSX如屏幕截图所示:

running in browser

我尝试将Twilio.Device Error: JWT signature validation failed移交给这样的电话:

{debug : true}

并获得以下输出:

console logging JS error

但目前还不清楚发生了什么。如果我尝试将返回到Python控制台的实际兼容性令牌(使用JWT encoder/decoder)并尝试使用Twilio秘密身份验证令牌和HS256 algorithm解码它:

Twilio.Device.setup(data.token, { debug: true }); 

我收到以下错误:

from jose import jwt 
token = "xxxxx"  # compatibility token from above in browser
print jwt.decode(token, TWILIO_AUTH_TOKEN, algorithms=['HS256']) 

所以也许他们没有将它作为编码解码的秘密,所以不确定证明了多少。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

有几件事要尝试。

首先:确保您使用的是实际的AccountSID和AuthToken,DONT尝试使用"测试凭证"。如果您在试用帐户中一切正常,twilio只会对语音通话提出问候语。

第二:确保您已经创建了一个TwiML应用程序并且正在使用该关联的AppID来实现" applicationId"在" allowClientOutgoing"方法

这应该可以帮助您完成JWT签名过程。如果您的服务器似乎没有工作。我刚刚构建了位于here的Google Apps脚本版本。只需复制一下代码中的符号来放置您的凭据和appId,然后您就可以看到它是否与您的服务器有关。 要使用,只需向pubilshed应用程序脚本URL发出GET请求,它就会重新获取令牌。

确保JWT签名正确后确保的其他步骤。

对于传出,您将需要回拨到您的服务器,以便发送一些TwiML以及拨打拨出号码的订单。附加的Google Apps脚本上还有一个设置。将脚本URL添加到已注册的twilio号码上的语音回调部分,并将其设置为POST请求。

传出的TwiML示例

<Response><Dial callerId="+//enter your registered phonenumber here////">'+tocall+'</Dial></Response>'

对于传入连接,您需要设置一个带有一些代码的TwiML Bin,以拨打您在&#34; allowIncoming(clientName)&#34;中使用的用户名。方法

传入的TwiML示例

<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Dial>
    <Client>//client name or id registered during token generation here\\</Client>
    </Dial>
</Response>

然后将TwiML Bin分配给控制台内注册的语音的传入侧。