0

我有几个用 ASP.NET MVC 5 编写并托管在 IIS7 上的仅 Intranet 网站。
对于这些,我想在访问数据库时启用模拟。

我不想要持续整个请求的完整模拟- 因为我不需要它并且因为集成模式不支持它并且需要抑制错误

重要的一点是,这里的模拟与安全性无关。我不想阻止任何人访问该网站(如果他们在公司的网络上,那已经是授予的权限)。
相反,我需要针对某些操作将 Windows 用户名存储在数据库中,仅用于记录目的。如果没有可用于记录的 Windows 用户名,那很好,用户必须能够继续。

我将要使用的代码是

var identity = User.Identity as System.Security.Principal.WindowsIdentity;
if (identity != null && !identity.IsAnonymous)
{
    using (var context = identity.Impersonate())
    {
        // access SQL Server who will get the user name from SUSER_SNAME()
    }
}

问题是,为了让 IIS 获取 Windows 凭据,必须禁用匿名访问,否则 IIS甚至不会尝试以某种方式请求凭据。

这是一个问题,因为我想保持匿名访问。

是否可以以某种方式配置 IIS 或应用程序以允许匿名用户进入?

理想情况下,这应该透明地发生,但如果这不可能,我可能会对浏览器显示用户名/密码对话框感到满意,用户可以通过单击确定关闭该对话框,这将为 IIS 提供空白的用户名/密码,这将允许他们并将他们映射到匿名情况(ish)。

但是,向浏览器可以自动提供 Windows 凭据的用户请求凭据是不行的(默认情况下,IE 会这样做,Firefox 在更改设置后会这样做)。

我见过这个 .NET v1.1 时代的 hack,它涉及对私有字段的反射和这个关于编写自定义的问题HttpModule- 但据说它是在 IIS 完成其身份验证业务后调用的,这为时已晚,我不知道如何从这样的自定义处理程序启动 NTLM 握手。

4

0 回答 0