PJSIP開發手冊之認證框架(九)

2021-06-26 19:44:49 字數 2659 閱讀 4226

第九章 認證框架

pjsip的認證框架支援客戶端和服務端的認證。這個認證框架預設支援http摘要認證,但是其他認證機制也可以加入這個框架。

下圖說明了該框架的「類圖」:

客戶端認證框架

客戶端認證框架管理從客戶端到所有下流的伺服器的認證處理。它可以使用正確的證書(當這樣的證書被提供)響應伺服器的挑戰,快取認證資訊和使用快取的認證資訊來初始化後續的請求。

客戶端認證框架指南

認證apis在中宣告。下面是認證所用的資料結構和函式的文件說明。

資料結構指南

資料結構

描述

pjsip_cred_info

這個資料結構描述了用來認證指定realm的證書。乙個客戶端在乙個dialog或註冊期間,可以有多個證書;每個證書的資訊需要用來認證乙個特定的下流的**或伺服器。

例如,客戶端需要乙個證書來認證它的outbound**,和其它證書來認證端伺服器。

pjsip_cached_auth

這個結構儲存從乙個特定伺服器接收到的最近的挑戰。客戶端可以利用最近的挑戰來建立乙個請求。

pjsip_auth_clt_sess

這個結構描述客戶端認證會話。客戶端將通常在乙個dialog或客戶端註冊期間,一直保持這個結構。

函式指南

初始化客戶端認證會話資料結構,並設定pool負責為該會話進行後續的記憶體分配。該版本的pjsip中,options引數應該設定為0。

設定會話過程要使用的證書。這將使用客戶端認證的記憶體池來複製指定的證書。

這個函式根據會話中快取的資訊,增加所有相關的認證頭部域到乙個新的外出請求tdata中。在呼叫這個函式前,請求訊息的請求行必須有效。

基於接收到失敗的認證狀態碼(401/407響應),呼叫這個函式去重新初始化乙個請求,這個函式將根據old_request建立乙個new_request,和根據在rdata中找到的挑戰增加適當的authorization和proxy-authorization頭部域。另外,這個函式也把相關的資訊放進這個會話中。

如果這個挑戰的乙個證書丟失,則這個函式將返回失敗。注意這個函式會復用老的請求而不是建立乙個新的。

例子

客戶端transaction認證

下面的例子說明如何使用認證資訊來初始化外出請求和如何處理接收到的伺服器的挑戰。為了簡便起見,錯誤處理沒有在下面的例子中展示。乙個真實的應用需要各個情況的錯誤處理。

服務端認證框架

服務端認證框架提供兩種型別的伺服器認證機制:

服務端認證會話目前沒有被實現。只有全域性的session-less服務端認證框架可用。

服務端認證指南

資料型別指南

函式型別被註冊到認證伺服器上,用來查詢在指定realm中的指定acc_name的證書資訊。當證書資訊成功被恢復,這個函式將在cred_info引數中填上證書並返回pj_success。否則它返回以下乙個錯誤碼:

函式指南

初始化服務端認證會話資料結構來服務指定realm和使用lookup_func函式來查詢證書資訊。

options引數是下面值的位掩碼組合:

請求服務端認證框架去核實在rdata中指定請求中的認證資訊。如果status_code不是null,它將被填上合適的響應狀態碼(401/407等等)。

當請求中的認證資訊可以被接受或當認證失敗時出現下面的錯誤,這個函式將返回pj_success:

向tdata中的外出訊息中增加認證挑戰的頭部域。如果qop被指定,那麼它將被加入到這個挑戰中。應用也可以為應用指定自定義的nonce和opaque,               或者可以將這些值保留為null,讓這個函式想這些值裡填入隨機的字元。

擴充套件認證框架

認證框架可以被擴充套件來支援除了http摘要之外的其他認證機制。(例如,pgp等)

待做。

翻譯 pjsip開發者指南(九)認證框架

chapter 9 authentication framework pjsip提供客戶端和伺服器的認證框架。認證框架支援預設的http摘要認證,但是其他的認證方案也可以加到框架中。下面的圖表描述了框架的類圖。客戶端身份驗證框架管理客戶端到所下游伺服器的身份驗證過程。它能以正確的憑證來響應伺服器的認...

PJSIP開發手冊之Presence事件包(十四)

第十四章 presence事件包 介紹 presence相關的sip定義在rfc3856 a presence event package forthesession initiation protocol sip 這個presence事件包允許乙個endpoint來訂閱乙個uri的presence...

PJSIP開發手冊之訊息快取區(五)

第五章 訊息快取區 接收訊息快取區 pjsip接收到乙個sip訊息後,將以pjsip rx data型別,而不是簡單的訊息本身,來傳遞到pjsip 的不同軟體元件。這個結構 pjsip rx data 包含接收到的訊息的所有資訊。接收資料快取結構 傳輸資料快取區 pjsip tx data 當pjs...