我正在处理一个 ASP.NET 页面,我们在代码中模拟了请求用户。我们正在使用以下代码开始模拟。
Dim impersonationContext As System.Security.Principal.WindowsImpersonationContext
Dim currentWindowsIdentity As System.Security.Principal.WindowsIdentity
currentWindowsIdentity = CType(User.Identity, System.Security.Principal.WindowsIdentity)
impersonationContext = currentWindowsIdentity.Impersonate()
在此之后,我们通过调用验证了应用程序正在正确的上下文中运行:
System.Security.Principal.WindowsIdentity.GetCurrent().Name
这将返回用户的正确身份,并且文件访问和其他项目似乎正在使用他们的帐户。但是,当使用 Microsoft 应用程序数据应用程序块 SqlHelper 类调用使用受信任连接的数据库时,“NT AUTHORITY\ANONYMOUS LOGON”用户身份验证失败。
我们可以在失败后重新验证当前身份仍然是我们想要的帐户,而不是匿名登录帐户。
有谁知道这是为什么?或者更具体地说,我们如何绕过它?
编辑 有关来自这些页面的调用如何工作的一些附加信息。
我们从 .aspx 页面进行模拟调用。
在我们模拟之后,我们调用一个被引用的“业务逻辑”程序集。
我们知道上下文标识在这里仍然是正确的。
之后,“业务逻辑”程序集调用另一个实际执行可信连接调用的程序集。我们不能修改这个“数据访问”程序集,这个程序集也会报告身份验证异常。