1

作为从事过此类项目的人,您可能知道这个网站:

使用 .NET 开发模块

在这篇文章中,Mike Volodarsky 创建了一篇关于如何为 IIS7 创建自己的安全身份验证扩展的非常好的帖子。

我拿了这个并根据自己的需要进行了修改。我正在获取基本身份验证凭据并调用外部 Web 服务来对来自不同 Active Directory 域的用户进行身份验证。

到目前为止,这基本上可以正常工作。

调用 Web 服务需要一些时间,每个请求、站点、资源(图像、样式表、javascript 文件等)都会导致 IIS7 调用模块并再次进行身份验证。

我不知道 IIS7 如何处理这个模块,所以我决定创建一个基于 sql-table 的安全令牌,其生命周期为 10 分钟。所以现在我的代码检查此令牌是否可用并授予访问权限,如果没有,则调用 Web 服务再次进行身份验证。

我开发了所有东西,而且效果很好。在生产中,我遇到了更严重的超时,并发现我的 sql 连接是问题所在。连接池过载。我用一个糟糕的解决方法解决了这个问题,将池大小设置为非常大的数字。

现在这是我的问题/问题:

有谁知道这个模块是否会以任何方式留在内存中,以便我可以将令牌存储在内存中 - 应用程序池范围?这个想法是在应用程序运行时将令牌存储在内存中。但是我找不到任何信息来帮助我了解模块在 IIS7 中是如何处理的,以及我的想法是否可以解决问题。

4

1 回答 1

1

您不会将模块本身保存在内存中,但常见的是使用加密的 cookie 或会话来维护凭据。不过,听起来您有点混淆了问题。您的模块听起来可以(并且应该)由自定义成员资格提供程序处理,而不是自定义身份验证模块。

假设(根据您的帖子)您正在通过网络获取一个人的用户名和密码(表面上来自网络表单),您应该使用 ASP.NET 中的表单身份验证提供程序,然后实现一个 customMembership 提供程序来执行实际操作信用检查。然后,Forms Atuh 提供程序可以处理维护您的应用程序和用户浏览器之间的身份验证令牌。

于 2011-01-08T16:10:01.140 回答