调用扩展 DLL

注意

从 Windows Server 2008 开始, (IAS) 的 Internet 身份验证服务 (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,请务必不要对检索到的授权做出任何假设。

 

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

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

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

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

RadiusExtensionProcess2 回调函数

NPS 扩展 DLL 还可以导出 RadiusExtensionProcess2,而不是 RadiusExtensionProcess 或 RadiusExtensionProcessEx 此函数允许 DLL 在身份验证请求或响应中添加、修改和删除属性。

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

  • 在授权 DLL 中, RadiusExtensionProcess2 接收 NPS 授权服务生成的属性和从以前称为授权 DLL 的属性生成的属性。
  • RadiusExtensionProcess2 没有 pfAction 参数。 RadiusExtensionProcess2 使用 RADIUS_EXTENSION_CONTROL_BLOCK 结构中提供的 SetResponseType 函数设置请求的最终处置。
  • NPS 始终在任何剩余 DLL 中调用 RadiusExtensionProcess2 函数,而不考虑先前 DLL 中的函数是否返回 Accept。

设置扩展 DLL

用户标识属性