调用扩展 DLL

注意

从 Windows Server 2008 开始,Internet 身份验证服务 (IAS) 已重命名为网络策略服务器 (NPS) 。 本主题的内容适用于 IAS 和 NPS。 在整个文本中,NPS 用于引用服务的所有版本,包括最初称为 IAS 的版本。

 

NPS 扩展 DLL 必须导出以下回调函数中的至少一个: RadiusExtensionProcessRadiusExtensionProcessExRadiusExtensionProcess2。 NPS 针对从网络访问服务器 (NAS) 接收的每个有效身份验证或会计数据包调用这些函数。 NPS 在 NPS 的参数注册表项下面列出的每个 DLL 中调用这些函数。 DLL 按列出顺序调用。

如果 NPS 扩展 DLL 导出上述多个函数,NPS 仅调用其中一个函数:操作系统支持的最新函数。

注意

IAS 最初仅支持 RadiusExtensionProcess。 IAS 还支持 RadiusExtensionProcessEx。 IAS (及更高版本的 NPS) 还支持 RadiusExtensionProcess2

 

NPS 扩展 DLL 还可以导出 RadiusExtensionInitRadiusExtensionTerm 函数。 如果存在这些函数,则 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,请务必不要对检索的授权做出任何假设。

 

如果返回“继续”或“接受”,则会在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,也可以导出 RadiusExtensionProcess。 此函数使 DLL 能够向身份验证响应追加其他授权属性。

RadiusExtensionProcess 回调函数部分所述的相同信息适用于 RadiusExtensionProcessEx 函数。

RadiusExtensionProcessEx 无法修改或删除存在的任何属性。 如果出现 DLL 必须修改或删除属性的情况,唯一的选择是使用 NPS 用户界面来确保属性不存在。 默认情况下,不存在任何授权属性。 必须通过用户界面添加存在的任何内容。

如果配置了多个授权 DLL,并且其中一些 DLL 实现 RadiusExtensionProcessEx,则给定 DLL 中的 RadiusExtensionProcess/Ex 函数不会从以前称为 Authorization DLL 的属性接收这些属性。 它仅接收 NPS 授权服务生成的这些属性。

RadiusExtensionProcess2 回调函数

NPS 扩展 DLL 还可以导出 RadiusExtensionProcess2 而不是 RadiusExtensionProcess2,或者除了 RadiusExtensionProcessRadiusExtensionProcessEx 之外。 此函数使 DLL 能够向身份验证请求或响应添加、修改和删除属性。

RadiusExtensionProcessEx Callback 函数部分所述的相同信息适用于 RadiusExtensionProcess2 函数,但有以下例外:

设置扩展 DLL

用户标识属性