2013-10-24 37 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。