opensips實戰教程(四): 使用自己的賬號系統鑑權

目錄

前言

1、OpenSIPS對請求進行鑑權

    1.1 SIP鑑權請求過程

2、鑑權模塊配置

3、REGISTER註冊請求鑑權

4、Proxy代理請求鑑權

 

 

 

前言

    

    註冊鑑權和代理鑑權鑑權是RFC3261中規定的,但這不是強制要求的,事實上在實踐中很多時候是不用鑑權的,一是鑑權需要耗費時間,二是很多時候已經對IP做了鑑權,所以非法請求基本都會被過濾掉。但鑑權在一些場景下是會用到的。

 

 

1、OpenSIPS對請求進行鑑權

 

OpenSIPS做爲一個sip代理服務器,支持客戶端註冊到OpenSIPS。註冊客戶端可以呼叫經由OpenSIPS代理轉發到其它sip服務器或網關,或者直接呼叫註冊在同一個OpenSIPS上的SIP終端。

OpenSIPS數據庫使用subscriber表存儲自己的賬號和密碼,如果需要創建賬號測試,可以使用腳本創建賬號,如:

./opensipsctl   add   101   101     # 添加用戶101,密碼101 

 

SIP鑑權請求過程

Sip鑑權主要有兩種,一種是Register鑑權,一種是代理鑑權。如下圖所示(省略了ACK):

註冊鑑權只針對REGISTER請求,代理鑑權則一般會針對REGISTER之外的其他請求。對請求進行鑑權不是必需的,鑑不鑑權取決於業務需要。而在OpenSIPS中,如果需要鑑權,只需在需要鑑權的請求路由腳本中添加ww_authorize()或proxy_authorize()函數即可實現。下面用實例進行說明。

 

2、鑑權模塊配置

 

通常情況下,我們都不會用opensips庫的subscriber表中的賬號和密碼進行鑑權,而是使用項目業務系統的賬號系統進行鑑權。也就是使用業務系統的數據庫中的賬號密碼進行鑑權。如下圖配置

 

loadmodule "auth.so"

loadmodule "auth_db.so"

modparam("auth_db", "calculate_ha1", yes)

modparam("auth_db", "password_column", "password")   # 鑑權表中密碼字段名

modparam("auth_db", "user_column", "clientNumber")      # 鑑權表中賬號字段名

modparam("auth_db", "db_url",

        "mysql://root:[email protected]:3306/my_user_db")    # 數據庫鏈接設置

需要在auth_db模塊中配置我們賬號系統的數據庫地址和用戶名,已及用戶和密碼對應的表字段名。

3、對REGISTER請求鑑權

 

SIP終端註冊到SIP服務器上一般需要鑑權,以驗證註冊終端的有效性,只允許成功註冊上的SIP終端發起呼叫。OpenSIPS中對註冊請求使用我們自己的賬號體系進行鑑權很簡單。如下是路由配置:

route{

    ...

if  (is_method("REGISTER")){

                   # authenticate the REGISTER requests

                   #  auth_db模塊中配置的數據庫中的用戶表

                   if  (!www_authorize("", "tb_extension")){ 

                            www_challenge("",  "0");

                            exit;

                   }

              if (!db_check_to()) {

                            sl_send_reply("403","Forbidden  auth ID");

                            exit;

               }

               if (client_nat_test("11"))  {

                        fix_contact();     # 修復AOR,解決NAT問題

              }

...

                exit;

         }

...

}

 

4、代理請求鑑權

    

代理鑑權與註冊鑑權類似。

route{

    ...

if  (is_method("REGISTER")){

                    #  auth_db模塊中配置的數據庫中的

                    # 用戶表、字段鑑權

                if  (!proxy_authorize("", "tb_extension")){ 

                       www_challenge("",  "0");

                        exit;

                }

                if (!db_check_from()) {

                       sl_send_reply("403","Forbidden  auth ID");

                       exit;

                }

            } else {

                    if (!uri==myself) {

                           send_reply("403","Rely forbidden");

                           exit;

                    }

               }

         }

...

}

 

小結

當OpenSIPS作爲註冊服務器的時候,這兩種鑑權操作是會用到的。首先用戶註冊上來需要鑑權通過纔可以,註冊上的用戶發起請求也要對請求進行代理鑑權。其他時候可能要求就沒有這麼嚴格了。


(全文完)

 

更多參考官方文檔:

http://www.opensips.org/html/docs/modules/2.3.x/auth_db.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章