2013-10-24 36 views
1

我使用ASTERISK桥接我公司内部的SIP呼叫。Asterisk SIP自定义身份验证

只有经过认证/授权的用户才可以拨打电话。

我们已经有一个处理认证的服务,那么有什么方法可以将来自星号(sip.conf)的认证集成到我们的服务中吗?

因此,不是在sip.conf中键入所有用户和密码,而是只需调用一些与我们的身份验证服务通信的API。

基本上我需要一种方法从SIP设备获取用户名/密码并进行身份验证。 由于每个用户都有不同的密码,因此当我们已经拥有数据库中的所有用户/密码时,将其全部输入到sip.conf中将变得不切实际。

感谢

回答

2

有很多方法可以做到权威性的星号

  • 使用星号realtime architecture,身份验证是通过数据库(MySQL的/ ODBC)。这一个是强烈推荐的方法。对于实时SIP集成,请参阅this
  • 使用exec包含方法(在重新加载执行提供配置的外部脚本)。只会在重新加载时更改配置。 Check this link
  • 在星号之前使用openser(kamailio/opensips),用curl使用avpairs从API获取答案。您的API必须非常快速,您需要成为opensips/kamailio的专家。

因为所有这些都是为星号相当普遍的事情,可能是你需要一个星号专家的验证/安全审计/绩效审计为您的系统,或者您需要有人从你的员工看了一些书状O'Reilly's Asterisk The Future Of Telephony只是了解一些可能的问题。

+0

谢谢。 ODBC路径看起来很复杂,因为它会对数据库格式造成严重的限制。我们已经有了一个与我们许多内部流程集成的数据库,所以我们无法改变它来适应星号。第二个选项是一个很好的选择!只是写一个C++程序,'printf'sip.conf信息可以工作?问题是传递所有用户的开销......我无法理解第三种选择。你能解释一下吗?非常感谢 ! – user1558688

+0

格式没有任何问题。只需创建视图并将星号指向该视图即可。如果你的团队没有熟练的MySQL(或其他数据库)开发人员 - 聘用一个,这是一项简单的任务。对于第二个选项,任何创建正确的配置文件到标准输出的程序都可以工作。第三个选项 - 使用kamailio.org软件。恐怕你需要kamailio专家来使用它。 – arheops

1

arheops已经击中了大选项。他很酷。或者,如果您的手机像某些手机一样支持电话上的XML浏览/ Java应用程序,则还可以使用自定义SIP标头提供第二种身份验证因素。因此,该电话具有一个非旋转的RSA密钥,用于第一个身份验证因素,然后动态地对您的身份验证服务器执行CHAP样式的调用,以检索包含在自定义SIP头中的寿命较短的“go key” 。没有时间有效的标题,没有呼叫权限。 如果你能推导出双因素认证方案,其中一个因素是RSA/DSA密钥,那么你很可能就足够安全了。

0

您可以使用AGI直接(或间接通过Web服务)连接到您的数据库。 AGI可以使用PHP,Java,Python ...或Asterisk提供的其他语言编写。 当一个分机尝试拨打电话,你的Agi连接到数据库,完全用户名/密码,然后验证.... 希望这种帮助,

+0

那就是我寻找的那种东西。我可以用C写吗?如果是这样,我的AGI脚本如何将信息返回给拨号方案,以便星号与桥接进行或不进行?有没有例子?谢谢 – user1558688

+0

另一个问题是:如何从脚本中获取SIP设备的凭据?用户名和'秘密'信息? – user1558688

+0

您不能使用agi进行sip认证。人回答不是专家。 – arheops

0

我在Asterisk工作超过2年。我曾经使用AGI来连接Windows环境。我写了很多Asterisk代码来削减IVR ......等等。我使用PHP编写AGI。所以,AGI连接到Microsoft SQL,获取数据并将数据返回到Asterisk拨号计划。这个任务并不简单,但并不困难。问题是你必须学习如何在Asterisk中编写代码,并学习如何使用AGI。