2016-11-21 54 views
0

我正在嘗試在sip客戶端和FS系統之間進行集成。 SIP客戶端在身份驗證階段發送一個JWT令牌作爲密碼。Freeswitch JWT集成

爲了驗證客戶端,FS創建一個帶有密碼字段的目錄條目並將其與來自客戶端的密碼進行比較,在我的情況下,我需要通過獲取顯示爲密碼的「標記」來覆蓋此行爲,驗證它並將答案返回給FS,以確認驗證結果,以便知道是接受還是拒絕用戶。

我不知道如何在不改變源代碼的情況下覆蓋FS中的這種行爲。我寧願寫一個python或lua插件來處理這個問題。

非常感謝,

+0

能否詳細說明完整的工作流程?您可以通過mod_xml_curl即時生成FS目錄條目,並且該條目將包含動態密碼字段。但是這需要測試。另一種方法是使用Kamailio作爲SIP註冊商而不是FreeSWITCH。 –

+0

嗨,我們有一個客戶端使用PJSIP庫和內部AuthCredInfo結構(數據字段),我們將JWT令牌傳遞給FS。我們需要找到一種方法來驗證令牌,而不是使用標準過程完成的密碼比較。基本上我需要在用戶名/密碼上執行一個腳本,並向FS返回true或false,以便知道用戶是否被允許。 –

+0

我仍然認爲kamailio在這種情況下更適合作爲SIP註冊服務商。如果有預算,我很樂意幫助設計和建立一個POC。如果需要,您可以輕鬆找到我的聯繫人。 –

回答

1

似乎應該使用下面的解決方案。

爲了允許FS使用JWT進行身份驗證,必須將自定義標頭內的JWT從用戶代理髮送到FS。另外重要的是將一些已知的密碼提供給用戶代理。

當UA連接到FS並使用lua腳本(xml-handler-script,xml-handler-bindings)動態構建目錄時,可以驗證JWT併爲用戶提供正確的目錄條目通過閱讀自定義標題字段。

如果JWT有效,那麼將使用正確的密碼(已知的密碼)來允許FS繼續執行該操作,否則將提供另一個無效密碼,FS將斷開連接。

希望幫助到別人,

+0

看起來有效,如果FS沒有任何其他方式知道令牌。我認爲JWT令牌發行者和FS能夠訪問相同的後端並瞭解有效令牌 –

+0

感謝Stanislav。 FS沒有意識到auth服務器,它必須根據已簽名的令牌驗證客戶並且具有到期日期。它使程序更快,因爲它不需要該用戶的數據庫查找。 –

0

有兩個參數在FreeSWITCH的:

  1. 接受盲-AUTH:接受任何身份驗證,而無需實際檢查(不是一個很好的功能,對於大多數人來說)

    <param name="accept-blind-auth" value="true"/> 
    
  2. auth-calls:目錄中的用戶可以應用「auth-acl」參數以限制用戶訪問預定義ACL或C IDR。

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

    值可以是「假」來此配置文件禁用身份驗證,這意味着當電話打進來的配置文件將發送權威性的挑戰給調用者。

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

所以現在你可以打電話給你的lua腳本和註冊,它實際上檢查註冊,邀請使用自定義logic.now freeswitch是不會執行任何身份驗證。

+0

尊敬的Suren,謝謝您的評論。它仍然要求我將JWT傳遞給自定義標題中的FS。似乎沒有辦法繞過它。 –