【问题标题】:Freeswitch JWT IntegrationFreeswitch JWT 集成
【发布时间】:2016-11-21 11:59:10
【问题描述】:

我正在尝试在 sip 客户端和 FS 系统之间进行集成。 SIP 客户端在身份验证阶段发送一个 JWT 令牌作为密码。

为了验证客户端,FS 创建一个带有密码字段的目录条目,并将其与从客户端收到的密码进行比较,在我的情况下,我需要通过获取显示为密码的“令牌”来覆盖此行为,验证它并将验证结果的答案返回给 FS,以便它知道是接受还是拒绝用户。

我不确定如何在不更改源代码的情况下在 FS 中覆盖此行为。我宁愿写一个 python 或 lua 插件来处理。

非常感谢,

【问题讨论】:

  • 您能否详细说明完整的工作流程?您可以通过 mod_xml_curl 即时生成 FS 目录条目,其中包含动态密码字段。但这需要测试。另一种方法是使用 Kamailio 作为 SIP 注册器而不是 FreeSWITCH。
  • 嗨,我们有一个使用 PJSIP 库的客户端,在 AuthCredInfo 结构(数据字段)中,我们将 JWT 令牌传递给 FS。我们需要找到一种方法来验证令牌,而不是使用标准程序完成的密码比较。基本上我需要在用户名/密码上执行一个脚本并向 FS 返回 true 或 false,这样它就会知道用户是否被允许。
  • 我仍然认为 kamailio 在这种情况下更适合作为 SIP 注册商。如果有预算,我很乐意为此设计和构建 POC 提供帮助。如果需要,您可以轻松找到我的联系人。

标签: python lua jwt sip freeswitch


【解决方案1】:

看来应该使用下面的解决方案。

为了允许 FS 使用 JWT 进行身份验证,有必要将自定义标头中的 JWT 从用户代理发送到 FS。将一些已知密码输入用户代理也很重要。

当 UA 连接到 FS 并使用 lua 脚本(xml-handler-script、xml-handler-bindings)动态构建目录时,可以验证 JWT 并为用户提供正确的目录条目,只需通过读取自定义标题字段。

如果 JWT 有效,则将使用正确的密码(已知密码)以允许 FS 继续操作,否则 - 将提供另一个无效密码并且 FS 将断开连接。

希望对某人有所帮助,

【讨论】:

  • 看起来有效,如果 FS 没有任何其他方法可以知道令牌。我认为 JWT 令牌颁发者和 FS 能够访问相同的后端并了解有效令牌
  • 感谢斯坦尼斯拉夫。 FS 不知道身份验证服务器,它必须根据已签名并具有到期日期的令牌来验证客户。它使过程更快,因为它不需要为该用户查找数据库。
【解决方案2】:

FreeSWITCH中有两个参数:

  1. accept-blind-auth:接受任何身份验证而不实际检查(对大多数人来说不是一个好功能)

    <param name="accept-blind-auth" value="true"/>
    
  2. auth-calls:目录中的用户可以应用“auth-acl”参数,以限制用户访问预定义的ACL或CIDR。

    <param name="auth-calls" value="$${internal_auth_calls}"/>
    

    值可以是“false”以禁用此配置文件上的身份验证,这意味着当调用进入配置文件时,将不会向调用者发送身份验证质询。

请查看更多https://wiki.freeswitch.org/wiki/Sofia.conf.xml#auth-calls

所以现在您可以在通话和注册时调用您的 lua 脚本,它实际检查注册,使用自定义逻辑邀请。现在 freeswitch 不会执行任何身份验证。

【讨论】:

  • 亲爱的苏伦,感谢您的评论。它仍然需要我将 JWT 传递给自定义标头内的 FS。似乎没有办法解决。
猜你喜欢
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
  • 2023-02-05
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 2017-08-23
  • 2017-01-28
相关资源
最近更新 更多