我有一个在 IIS 6.0 下可以正常运行的网站:它使用 Windows 凭据对用户进行身份验证,然后在与访问数据库的服务通信时,它会传递凭据。

在 IIS 7.0 中,相同的配置设置不会传递凭据,并且数据库会受到 NT AUTHORITY\ANONYMOUS 的影响。

我有什么遗漏的吗?我已在 IIS 7.0 网站中关闭了匿名访问,但无法正常工作。

这些是我在 IIS 6.0 和 7.0 上使用的设置:

<authentication mode="Windows">
<identity impersonate="true">

6.0 到 7.0 发生了什么变化?

有帮助吗?

解决方案

IIS7和IIS6.0之间发生了变化。我为您找到了一篇可能真正对您有帮助的博客文章(点击此处查看).

您的应用程序是在集成模式还是经典模式下运行?据我所知,将 Impersonate 属性设置为 true 应该会显示 500 错误,并显示以下错误消息:

内部服务器错误。这是HTTP错误500.19:由于该页面的相关配置数据无效,因此无法访问请求的页面。

以下是建议的解决方法:

解决方法:

1)如果您的应用程序不依赖在beginRequest和AuthentIcateRequest阶段中模仿请求用户(在集成模式下模仿的唯一阶段),请通过将以下内容添加到应用程序的Web.config:

<validation validateIntegratedModeConfiguration="false"

/>

2)如果您的应用程序确实依赖于开始的QuainRequest和AuthentIcateRequest,否则您不确定,转到经典模式。

我希望这对了解 IIS 7.0 现在的工作原理有所帮助。

其他提示

您的 IIS 服务器是否设置为受 SQLServer 信任委派?我之前在使用 WebDAV 时遇到过这种情况,我们必须让运行受文件服务器信任的 IIS 的服务器代表文件服务器进行身份验证。

有趣的...我有相反的问题 - 不能够 使身份验证从客户端浏览器通过网络服务器传递到大型企业网络内的防火墙上的数据库。

我还认为对数据库进行“端到端用户”身份验证是一个坏主意,并且存在潜在的安全风险。没有什么可以阻止最终用户加载 SQL 查询并直接连接到您的数据库,因此您最好锁定您的架构!

@Esteban - 澄清了我的 对帮助你不太有用 回答。

通常,如果您执行这样的双跳身份验证,通常会涉及 Kerberos,除非第一个身份验证是基本身份验证。

我会检查 IIS 6 服务器上的身份验证,并确保它在 IIS 7 上是相同的。

如果 IIS 6 框设置为 Windows Integrated,则您需要验证 kerberos 设置 - SPN、委派等。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top