叫用擴充功能 DLL
注意
從 Windows Server 2008 開始,因特網驗證服務 (IAS) 已重新命名為網路原則伺服器 (NPS)。 本主題的內容同時適用於 IAS 和 NPS。 在整個文字中,NPS 會用來參考服務的所有版本,包括原本稱為 IAS 的版本。
NPS 擴充功能 DLL 必須匯出下列至少一個回呼函式:RadiusExtensionProcess、RadiusExtensionProcessEx或 RadiusExtensionProcess2。 NPS 會針對它從網路存取伺服器 (NAS) 接收的每個有效驗證或會計封包呼叫這些函式。 NPS 會在 NPS 的 Parameters 登錄機碼下所列的每個 DLL 中呼叫這些函式。 DLL 會依列出的順序被呼叫。
如果 NPS 擴充功能 DLL 匯出上述多個函式,NPS 只會叫用其中一個函式:作系統支援的最新函式。
注意
IAS 原本僅支援 RadiusExtensionProcess。 IAS 也支援 RadiusExtensionProcessEx。 IAS (及更新的 NPS) 也支援 RadiusExtensionProcess2。
NPS 擴充功能 DLL 也可以匯出 RadiusExtensionInit 和 RadiusExtensionTerm 函式。 如果存在,NPS 會在服務分別啟動和停止時呼叫這些函式。
RadiusExtensionProcess 回呼函式
在驗證延伸模組 DLL 中,RadiusExtensionProcess 會接收驗證或會計要求中 NPS 所接收的所有屬性。 使用這些屬性,函式可以執行其他驗證、驗證使用者的授權,或將會計記錄傳送至中央狀態伺服器。
在授權延伸模組 DLL 中,RadiusExtensionProcess 會接收 NPS 授權服務所產生的所有屬性。 這些是 Access-Accept 封包中傳回的屬性。
呼叫 RadiusExtensionProcess之後,NPS 所執行的動作取決於 RadiusExtensionProcess的傳回值,以及 pfAction 參數中傳回的值。 下表列出這些值。
pfAction | 驗證延伸模組 DLL | 授權擴展 DLL |
---|---|---|
接受 | 略過任何進一步的驗證延伸模組 DLL,也會略過 NPS 驗證機制。 | 不允許接受。 |
拒絕 | 略過任何進一步的驗證延伸模組 DLL,也會略過 NPS 驗證機制。 Access-Reject 封包已傳送。 | 省略其他額外的授權延伸模組 DLL。 |
繼續 | 如果登錄中未列出驗證延伸模組 DLL,封包會傳送至下一個驗證延伸模組 DLL 或 NPS 驗證機制。 | 如果登錄中未列出任何授權延伸模組 DLL,封包會傳送至下一個授權延伸模組 DLL 或 NPS 會計記錄檔。 |
針對所有延伸模組 DLL,如果 RadiusExtensionProcess 傳回錯誤,則會捨棄封包。 NPS 會計記錄不會處理因為錯誤而捨棄的封包。
如果發生錯誤,NPS 會將一般錯誤事件張貼至事件記錄檔。 建議延伸模組 DLL 提供額外的錯誤記錄。
如需代表上述程式的詳細資訊和圖表,請參閱 關於 NPS 延伸模組。
RadiusExtensionProcess 如果無法驗證封包的接受或拒絕,則應該傳回錯誤。 如果網路問題導致 RadiusExtensionProcess 無法與其使用者驗證資料庫通訊,就可能發生這種情況。
處理會計封包時,因為 pfAction 參數為 NULL,所以無法設定 pfAction。 處理會計要求時,從 RadiusExtensionProcess 函式傳回錯誤,會導致 NPS 捨棄要求。
注意
收到接受之後,NPS 不會在序列中的其餘 DLL 中呼叫 RadiusExtensionProcess。 由於某些驗證函式也可能實作授權,因此略過這類驗證函式可能會導致省略授權。 如果 RadiusExtensionProcess 的實例 傳回 Accept,請務必不要對擷取的授權進行任何假設。
如果傳回 Continue 或 Accept,則會在 Access-Accept 封包中傳回對應至領域的配置檔。
驗證延伸 DLL 的設計應能與內建 NPS 驗證提供者及其他延伸 DLL 共存。 如果延伸模組僅適用於特定用戶資料庫(例如 Windows Active Directory),則應該先確認傳入 pAttrs 參數的 ratProvider 屬性,再處理要求。 ratProvider 屬性會是 pAttrs 參數所指向 屬性清單之一。
擴充 DLL 不應該拒絕要求,因為缺少必要的屬性。 例如,如果驗證延伸模組需要 User-Password 屬性 ratUserPassword,而且屬性不存在,擴充功能應該會傳回 raContinue 的動作,讓其他延伸模組和提供者有機會處理要求。
NPS 會在決定使用特定驗證資料庫之後,呼叫 RadiusExtensionProcess 函式,但在使用者通過驗證之前。 因此,函式可以取得關於使用哪個驗證資料庫的資訊,以便於函式在適當的驗證資料庫中檢查用戶的授權。 NPS 支援各種驗證資料庫,包括 Windows Active Directory。
RadiusExtensionProcessEx 回呼函數
NPS 擴充功能 DLL 可能會匯出 RadiusExtensionProcessEx,而非或另外匯出 RadiusExtensionProcess。 此函式可讓 DLL 將其他授權屬性附加至驗證回應。
RadiusExtensionProcess 回呼函式 一節中所述的相同資訊適用於 RadiusExtensionProcessEx 函式。
RadiusExtensionProcessEx 無法修改或移除任何存在的屬性。 如果發生 DLL 必須修改或移除屬性的情況,唯一的選項是使用 NPS 使用者介面來確保屬性不存在。 根據預設,沒有任何授權屬性存在。 任何已存在的項目都必須透過使用者介面新增。
如果已設定多個授權 DLL,而且其中一些 DLL 會實作 RadiusExtensionProcessEx,則指定 DLL 中的 RadiusExtensionProcess/Ex 函式不會接收先前稱為 Authorization DLL 的屬性。 它只會接收 NPS 授權服務所產生的屬性。
RadiusExtensionProcess2 回調函式
NPS 擴充功能 DLL 也可以匯出 RadiusExtensionProcess2,而非 RadiusExtensionProcess 和 RadiusExtensionProcessEx。 此函式可讓 DLL 在驗證要求或回應中新增、修改和移除屬性。
RadiusExtensionProcessEx Callback 函式 一節中所述的相同資訊適用於 RadiusExtensionProcess2 函式,但有下列例外:
- 在授權 DLL 中,RadiusExtensionProcess2 會接收 NPS 授權服務所產生的屬性,以及先前已呼叫的授權 DLL 所產生的屬性。
- RadiusExtensionProcess2 沒有 pfAction 參數。 RadiusExtensionProcess2 會使用 RADIUS_EXTENSION_CONTROL_BLOCK 結構中提供的 SetResponseType 函式來設定要求的最終處置。
- NPS 一律會呼叫任何剩餘 DLL 中的 RadiusExtensionProcess2 函式,不論先前 DLL 中的函式是否傳回 Accept。
相關主題