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

Posted

技术标签:

【中文标题】twilio.js 浏览器软件电话 - JWT 签名验证问题(Mac OSX / Chrome)【英文标题】:twilio.js browser softphone - issue with JWT signature validation (Mac OSX / Chrome) 【发布时间】:2017-03-01 12:15:49 【问题描述】:

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

不幸的是,它失败了,给出了这个错误:Twilio.Device Error: JWT signature validation failed 如截图所示:

我尝试像这样将debug : true 交给电话:

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

得到以下输出:

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

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

我收到以下错误:

/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.

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

有什么想法吗?

【问题讨论】:

你是如何生成你的 JWT 的? 【参考方案1】:

有几件事可以尝试。

首先:确保您使用的是实际的 AccountSID 和 AuthToken,不要尝试使用“测试凭据”。如果您使用的是试用帐户,则一切正常,twilio 只会在语音呼叫前添加问候语。

第二:确保您已创建 TwiML 应用程序,并在“allowClientOutgoing”方法期间将关联的 AppID 用于“applicationId”。

这应该可以帮助您完成 JWT 签名过程。如果您的服务器似乎无法正常工作。我刚刚构建了一个位于 here 的 Google Apps 脚本版本。只需按照代码中的符号复制一份以放置您的凭据和 appId,然后您就可以查看它是否与您的服务器有关。 要使用,只需向已发布的应用脚本 URL 发出 GET 请求,它将重新调整令牌。

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

对于拨出电话,您需要回拨到您的服务器,以便将一些 TwiML 发回,其中包含拨打拨出号码的命令。随附的 Google Apps 脚本也有一项设置。将脚本 url 添加到您注册的 twilio 号码上的语音回拨部分,并将其设置为 POST 请求。

传出的 TwiML 示例

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

对于传入连接,您需要使用一些代码设置 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>

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

【讨论】:

以上是关于twilio.js 浏览器软件电话 - JWT 签名验证问题(Mac OSX / Chrome)的主要内容,如果未能解决你的问题,请参考以下文章

静音流轨道Twilio js的音频/视频

Laravel/Lumen Tymon/JWT 通过电话号码和密码

readME

同时从移动设备和 Web 刷新 JWT 令牌的最佳实践

目前关于时间管理的软件有哪几款?稻草人跟GTD谁最好用?

drf认证组件权限组件jwt认证签发jwt框架使用