【发布时间】:2010-09-27 19:09:21
【问题描述】:
我正在处理一个 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 Application Data Application Block SqlHelper 类调用使用受信任连接的数据库时,“NT AUTHORITY\ANONYMOUS LOGON”用户身份验证失败。
我们可以在失败后重新验证当前身份仍然是我们想要的帐户,而不是 ANONYMOUS LOGIN 帐户。
有人知道这是为什么吗?或者更具体地说,我们如何才能绕过它?
编辑 有关来自这些页面的调用如何工作的一些附加信息。
我们从 .aspx 页面进行模拟调用。
在我们模拟之后,我们调用一个被引用的“业务逻辑”程序集。
我们知道这里的上下文标识仍然是正确的。
之后,“业务逻辑”程序集调用另一个实际执行可信连接调用的程序集。我们无法修改此“数据访问”程序集,此程序集也会报告身份验证异常。
【问题讨论】:
标签: asp.net vb.net security authentication impersonation