ISAPI 身份验证过滤器






3.25/5 (5投票s)
本文演示了使用 MFC ISAPI 类编写过滤器的方法。
在本文中,使用 MFC ISAPI 类重写了 Microsoft SDK ISAPI 认证过滤器示例。过滤器的功能保持完全相同,本文的目的是演示如何使用 MFC ISAPI 类编写过滤器。请注意,此认证过滤器并非最简单的示例,它提供了相当强大的功能(微软将其称为“高级认证过滤器”)。以下将使用微软文档的摘录来描述过滤器的功能。
“AuthFilt 演示了如何编写基于外部数据源的认证过滤器。认证是接受或拒绝来自客户端的请求的过程,因此每次收到认证请求时,AuthFilt 都会收到通知。此示例使用一个文件 (userdb.txt) 来跟踪授权用户,但您可以修改此示例以访问一个包含用户信息的用户数据库。”
“对于每个认证请求,AuthFilt 首先查找最近认证的用户的缓存,如果失败,AuthFilt 会在 userdb.txt 文件中查找。这展示了一种高效授权连接的方式:缓存允许过滤器快速认证用户,并且由于每个请求都通过过滤器进入,因此速度至关重要。”
该项目是一个标准的 appwizard 生成的 ISAPI 过滤器。AuthFilt Microsoft 示例的全局函数被封装在过滤器类中。可以更改 3 个参数以微调过滤器:缓存用户的最大数量、缓存条目移动到列表前端的位置(以缩短搜索时间!)以及包含用户名/密码对以及用户名/密码应映射到的相应 NT 帐户的文件名。所有这些参数都是 #define
指令,位于 authflit.h 标头文件中。
可以从几个方面改进过滤器:使用数据库而不是文件进行认证信息(您应该考虑使用存储过程进行搜索和/或缓存!),从注册表中加载参数,自动选择缓存用户的数量和列表重新排序参数等。
提供了完整的源代码,您需要编译它才能获得一个可用的过滤器。编译项目后,您需要执行以下步骤才能安装:
- 运行 REGEDT32.EXE 并按如下方式修改服务器的注册表。在 HKEY_LOCAL_MACHINE\CurrentControlSet\Services\W3SVC\Parameters 中选择过滤器 DLL 键。添加 authfilt.dll 的本地路径,通常为 C:\WinNT\System32\InetSrv\authfilt.dll。过滤器条目用逗号分隔。顺序很重要,如果您有其他具有相同优先级的认证过滤器,则列出的第一个过滤器将收到认证请求。
- 将 authfilt.dll 文件复制到您在注册表中指定的目录中。
- 确保系统帐户对过滤器 DLL 文件具有执行权限。
- 编辑 userdb.txt 文件,使其包含有效的用户名和密码。文件的格式为
User1:Password1, NTUser1:NTPassword1
User2:Password2, NTUser2:NTPassword2
User3:Password3, NTUser3:NTPassword3 - 将 userdb.txt 文件复制到您在 authfilt.h 标头文件中为用户数据库指定的目录中。
- 确保 System 帐户对 userdb.txt 文件具有读取权限。
- 重新启动 WWW 服务。