【问题标题】:ASP.NET Impersonation and SQL Server Trusted Connection CallsASP.NET 模拟和 SQL Server 可信连接调用
【发布时间】: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


    【解决方案1】:

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

    Impersonation and Delegation

    ASP.NET Delegation

    【讨论】:

    • 这就是问题所在,然后我们发现委托无法在我们的环境中工作......哦,好吧!
    • 有同样的问题...你说的委派不能工作是什么意思?
    【解决方案2】:

    我知道我之前在 ASP.NET 中使用过模拟(使用 C# 并访问文件系统),我想知道您是否尝试过将包含 currentWindowsIdentity.Impersonate() 的逻辑包装为a 'Using / End Using'(明确定义代码块的安全上下文)。

    所以,它看起来像这样:

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

    【讨论】:

    • 没有 using 语句,但在 try catch 中,finally 语句调用了 undo
    猜你喜欢
    • 1970-01-01
    • 2014-02-23
    • 2015-06-02
    • 2015-01-23
    • 1970-01-01
    • 2012-10-12
    • 2012-11-15
    • 2016-03-28
    • 1970-01-01
    相关资源
    最近更新 更多