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

Javascript twilio.js浏览器软电话-JWT签名验证问题(Mac OSX/Chrome),javascript,python,twilio,jwt,twilio-api,Javascript,Python,Twilio,Jwt,Twilio Api,使用Twilio官方软件,我得到一个电话号码和一个运行良好的TwiML应用程序,并启动flask服务器和ngrok转发过程。操作系统和浏览器是Mac OSX上的Chrome 53.0.2785.143(64位) 不幸的是,它失败了,出现以下错误:Twilio.Device错误:JWT签名验证失败,如屏幕截图所示: 我尝试将{debug:true}交给调用,如下所示: Twilio.Device.setup(data.token, { debug: true }); 并得到以下输出: 但目

使用Twilio官方软件,我得到一个电话号码和一个运行良好的TwiML应用程序,并启动
flask
服务器和
ngrok
转发过程。操作系统和浏览器是Mac OSX上的Chrome 53.0.2785.143(64位)

不幸的是,它失败了,出现以下错误:
Twilio.Device错误:JWT签名验证失败
,如屏幕截图所示:

我尝试将
{debug:true}
交给调用,如下所示:

Twilio.Device.setup(data.token, { debug: true }); 
并得到以下输出:

但目前还不清楚到底发生了什么。如果我尝试将返回的实际兼容性令牌抛出到Python控制台(使用),并尝试使用Twilio secret auth令牌和:

我得到以下错误:

/Users/me/.virtualenvs/myenv/lib/python2.7/site-packages/jose/jwt.pyc in decode(token, key, algorithms, options, audience, issuer, subject, access_token)
    132         payload = jws.verify(token, key, algorithms, verify=verify_signature)
    133     except JWSError as e:
--> 134         raise JWTError(e)
    135 
    136     # Needed for at_hash verification

JWTError: Signature verification failed.
所以也许他们没有把它作为编码解码的秘密,所以不确定这能证明多少


有什么想法吗?

有两件事要尝试

第一:确保您使用的是实际的AccountSID和AuthToken,不要尝试使用“测试凭据”。如果您的试用帐户一切正常,twilio只有一个预先准备好的语音通话问候

第二:确保您已经创建了一个TwiML应用程序,并且在“AllowClientToutGoing”方法期间使用了“applicationId”的关联AppID

这将帮助您完成JWT的签名过程。如果您的服务器似乎不工作。我刚刚建立了一个谷歌应用程序脚本版本。只需复制一份副本,然后按照代码中的符号放置您的凭据和appId,然后您就可以查看您的服务器是否有问题。 要使用,只需向pubilshed应用程序脚本URL发出GET请求,它就会重新运行令牌

确保JWT签名正确后的附加步骤

对于外出,您需要回拨您的服务器,以发送一些TwiML回传命令以拨打外出号码。附加的谷歌应用程序脚本上也有一个设置。将脚本url添加到您的注册号码上的语音回拨密码,并将其设置为POST请求

传出消息的示例TwiML

<Response><Dial callerId="+//enter your registered phonenumber here////">'+tocall+'</Dial></Response>'
“+tocall+”
对于传入的连接,您需要设置一个TwiML Bin,其中包含一些代码,以拨打您在“allowIncoming(clientName)”方法中使用的用户的姓名

传入的TwiML示例

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

//在此处生成令牌期间注册的客户端名称或id\\

然后将TwiML Bin分配给控制台内注册电话号码的传入端。

您是如何生成JWT的?
<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Dial>
    <Client>//client name or id registered during token generation here\\</Client>
    </Dial>
</Response>