ASP.NET模拟和SQL Server可信连接调用

时间:2008-12-19 22:11:28

标签: asp.net vb.net security authentication impersonation

我正在开发一个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”用户的身份验证失败。

我们可以在失败后重新验证当前身份仍然是我们想要的帐户而不是ANONYMOUS LOGIN帐户。

有谁知道为什么会这样?或者更具体地说,我们如何解决它?

修改 有关这些页面的调用如何工作的一些其他信息。

我们从.aspx页面进行模拟调用。

在我们冒充之后,我们召集了一个被引用的“业务逻辑”程序集。

我们知道上下文标识在这里仍然是正确的。

之后,“业务逻辑”程序集调用另一个实际执行可信连接调用的程序集。我们无法修改此“数据访问”程序集,此程序集也会报告身份验证异常。

2 个答案:

答案 0 :(得分:3)

我认为@John Sonmez是对的,你正在打双跳问题。模拟只是故事的一半,您还需要查看委托(假设您的网络正在使用Kerberos身份验证)。以下文章对帮助我完成同样的问题最有用

Impersonation and Delegation

ASP.NET Delegation

答案 1 :(得分:0)

我知道我之前在ASP.NET中使用过模拟(使用C#并访问文件系统),我想知道你是否尝试过包含 currentWindowsIdentity.Impersonate()的逻辑'使用/结束使用'(显式定义代码块的安全上下文)。

所以,它看起来像这样:

Using impersonationContext = currentWindowsIdentity.Impersonate() 
' Logic here 
End Using