叫用延伸模組 DLL
注意
從 Windows Server 2008 開始,網際網路驗證服務 (IAS) 已重新命名為網路原則伺服器 (NPS) 。 本主題的內容適用于 IAS 和 NPS。 在整個文字中,NPS 是用來參考服務的所有版本,包括原本稱為 IAS 的版本。
NPS 擴充功能 DLL 必須至少匯出下列其中一個回呼函式:RadiusExtensionProcess、RadiusExtensionProcessEx或RadiusExtensionProcess2。 NPS 會針對它從網路存取伺服器接收的每個有效驗證或會計封包呼叫這些函式, (NAS) 。 NPS 會在 NPS 的參數 登錄機碼下方所列的每個 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 Callback 函式
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 授權服務所產生的屬性,以及先前稱為 Authorization DLL 的屬性。
- RadiusExtensionProcess2 沒有 pfAction 參數。 RadiusExtensionProcess2會使用RADIUS_EXTENSION_CONTROL_BLOCK結構中提供的SetResponseType函式來設定要求的最終處置。
- NPS 一律在任何剩餘 DLL 中呼叫 RadiusExtensionProcess2 函式,不論先前 DLL 中的函式是否傳回 Accept。
相關主題