我工作的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登录”用户。

我们可以失败,目前的身份仍然是我们所期望的账户,而不是匿名登录帐户后重新验证。

有没有人有一个想法,这是为什么?或者更具体如何,我们可以围绕它得到什么?

修改 大约从这些页面的调用是如何工作的一些额外的信息。

我们从做.aspx页面中的冒充电话。

在我们模拟我们呼叫到被referecned一个“业务逻辑”组件。

我们知道上下文身份仍然是一个正确的位置。

在此之后,“业务逻辑”组件调用实际执行可信连接呼叫另一个组件。我们不能修改该“数据存取”组件,所述身份验证异常由该组件报道为好。

有帮助吗?

解决方案

我觉得@约翰Sonmez是正确的,你打双跳问题。模拟只是故事的一半,您还需要看看代表团(假设你的网络使用Kerberos身份验证)。下面的文章是最有用的,帮助我度过了同样的问题。

模拟和委派

ASP.NET团

其他提示

我知道我用模拟在ASP.NET(使用C#和访问文件系统)之前,我想知道如果曾试图包装,其包括的 currentWindowsIdentity.Impersonate()的逻辑与一个“使用/结束使用”(显式地定义为一个代码块的安全性上下文)。

所以,它应该是这样的:

Using impersonationContext = currentWindowsIdentity.Impersonate() 
' Logic here 
End Using
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top